```{r set-up}
#| cache: false
#| code-fold: false
# Load packages -----------------------------------------------------------
library(knitr)
library(kableExtra)
library(skimr)
library(janitor)
library(tidyverse)
library(metafor)
library(clubSandwich)
library(fastDummies)
library(ggrepel)
library(ggExtra)
library(ggridges)
library(MetBrewer)
library(GGally)
library(igraph)
library(fastDummies)
library(patchwork)
library(ggh4x)
```PRIMED Workflow for Group-Based Review
Introduction
This document contains all preliminary data analysis for the meta-analyses with dependent effects (PRIMED) in (Dalgaard et al. 2025). Below one can inspect the R packages we use for this analysis as well as the data set behind our analyses.
R packages
For exact R package versions, see the colophon by unfolding the Session Information at the bottom of this document.
Data manipulation - prepare data sets
In the following section, we construct all the main variables that are used in the main analysis of the review. Unfold the below code to see this exact manipulations.
Show the code
```{r load-data}
# Loading the needed data for analysis
group_based_dat <- readRDS("Group-based interventions data.RDS") |>
# The post-measurement of Empowerment Scale seems flawed for the study by
# Barbic et al. 2009 we therefore we exclude it from the analysis
filter(!(authors == "Barbic et al." & test_name == "The Empowerment Scale")) |>
mutate(
author_year = paste(authors, year),
study = paste(authors, year)
) |>
# Remove unused outcomes
filter(!str_detect(analysis_plan, "Unused"))
```Primary data manipulation for the overall data, including both all reintegrational as well as mental health outcomes
Show the code
```{r primary-data-manipultion}
gb_dat <-
group_based_dat |>
# Exclude the two binary outcomes
filter(variable_type != "Binary") |>
mutate(
es_id = 1:n(),
esid = es_id,
# Main covariate adjusted effect cluster adjusted
gt_pop = if_else(!is.na(gt_post), gt_post, NA_real_),
gt_pop = if_else(!is.na(gt_DD), gt_DD, gt_pop),
gt_pop = if_else(!is.na(gt_adj), gt_adj, gt_pop),
gt_pop = if_else(!is.na(gt_reg), gt_reg, gt_pop),
gt_pop = if_else(!is.na(gt_DD_pop), gt_DD_pop, gt_pop),
gt_pop = if_else(!is.na(gt_adj_pop), gt_adj_pop, gt_pop),
vgt_pop = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt_pop = if_else(!is.na(vgt_DD), vgt_DD, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj), vgt_adj, vgt_pop),
vgt_pop = if_else(!is.na(vgt_reg), vgt_reg, vgt_pop),
vgt_pop = if_else(!is.na(vgt_DD_pop), vgt_DD_pop, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj_pop), vgt_adj_pop, vgt_pop),
# Main covariate adjusted effect cluster adjusted
gt = if_else(!is.na(gt_post), gt_post, NA_real_),
gt = if_else(!is.na(gt_DD), gt_DD, gt),
gt = if_else(!is.na(gt_adj), gt_adj, gt),
gt = if_else(!is.na(gt_reg), gt_reg, gt),
vgt = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt = if_else(!is.na(vgt_DD), vgt_DD, vgt),
vgt = if_else(!is.na(vgt_adj), vgt_adj, vgt),
vgt = if_else(!is.na(vgt_reg), vgt_reg, vgt),
Wgt = if_else(!is.na(Wgt_post), Wgt_post, NA_real_),
Wgt = if_else(!is.na(Wgt_DD), Wgt_DD, Wgt),
Wgt = if_else(!is.na(Wgt_adj), Wgt_adj, Wgt),
Wgt = if_else(!is.na(Wgt_reg), Wgt_reg, Wgt),
# Hedges g posttest only, adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
gt_post = if_else(is.na(gt_post) & !is.na(gt_reg), gt_reg, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_adj), gt_adj, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_DD), gt_DD, gt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_reg), vgt_reg, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_adj), vgt_adj, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_DD), vgt_DD, vgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_reg), Wgt_reg, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_adj), Wgt_adj, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_DD), Wgt_DD, Wgt_post),
# Hedges' g posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
g_post = if_else(is.na(g_post) & !is.na(g_reg), g_reg, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_adj), g_adj, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_DD), g_DD, g_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_reg), vg_reg, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_adj), vg_adj, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_DD), vg_DD, vg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_reg), Wg_reg, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_adj), Wg_adj, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_DD), Wg_DD, Wg_post),
# Cohen's d posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
d_post = if_else(is.na(d_post) & !is.na(d_reg), d_reg, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_adj), d_adj, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_DD), d_DD, d_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_reg), vd_reg, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_adj), vd_adj, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_DD), vd_DD, vd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_reg), Wd_reg, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_adj), Wd_adj, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_DD), Wd_DD, Wd_post),
# Covariate adjusted Hedges' g, not cluster adjusted
g = if_else(!is.na(g_post), g_post, NA_real_),
g = if_else(!is.na(g_DD), g_DD, g),
g = if_else(!is.na(g_adj), g_adj, g),
g = if_else(!is.na(g_reg), g_reg, g),
vg = if_else(!is.na(vg_post), vg_post, NA_real_),
vg = if_else(!is.na(vg_DD), vg_DD, vg),
vg = if_else(!is.na(vg_adj), vg_adj, vg),
vg = if_else(!is.na(vg_reg), vg_reg, vg),
Wg = if_else(!is.na(Wg_post), Wg_post, NA_real_),
Wg = if_else(!is.na(Wg_DD), Wg_DD, Wg),
Wg = if_else(!is.na(Wg_adj), Wg_adj, Wg),
Wg = if_else(!is.na(Wg_reg), Wg_reg, Wg),
# Covariate-adjusted version of Cohen's d, neither cluster nor small sample adjusted
d = if_else(!is.na(d_post), d_post, NA_real_),
d = if_else(!is.na(d_DD), d_DD, d),
d = if_else(!is.na(d_adj), d_adj, d),
d = if_else(!is.na(d_reg), d_reg, d),
vd = if_else(!is.na(vd_post), vd_post, NA_real_),
vd = if_else(!is.na(vd_DD), vd_DD, vd),
vd = if_else(!is.na(vd_adj), vd_adj, vd),
vd = if_else(!is.na(vd_reg), vd_reg, vd),
Wd = if_else(!is.na(Wd_post), Wd_post, NA_real_),
Wd = if_else(!is.na(Wd_DD), Wd_DD, Wd),
Wd = if_else(!is.na(Wd_adj), Wd_adj, Wd),
Wd = if_else(!is.na(Wd_reg), Wd_reg, Wd),
inv_sample_size = (1/N_t + 1/N_c),
# ESS = round(4/vgt), # Using cluster bias corrected sampling variance
studyid = if_else(authors == "Gonzalez & Prihoda", 500, studyid),
cnt = if_else(cnt == "USA", "US", cnt),
design = if_else(design == "QES-pretest", "QES", design),
# MHV: Jeg synes ikke det er en god ide at ændre CRCT til RCT. Jeg vil gerne kunne se forskel.
# design = ifelse(design == "CRCT", "RCT", design),
assessment = if_else(assessment == "Self assesment", "Self assesment", assessment),
randomization = if_else(randomization == "Simple Block Randomization", "Block randomized",
randomization),
randomization = if_else(randomization == "Simple with permuted blocks, stratified by site",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Stratified?",
"Stratified randomization", randomization),
randomization = if_else(is.na(randomization) & studyid == 102,
"Stratified randomization", randomization),
randomization = if_else(randomization == "Ratio and block randomized",
"Block randomized", randomization),
randomization = if_else(randomization == "Block randomized stratified by site",
"Block randomized", randomization),
randomization = if_else(randomization == "Resticted and adapted randomization (i.e. minimization)",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Unequal simple randomization",
"Block randomized", randomization),
randomization = if_else(randomization == "Within-site basis and unequal allocation ratio",
"Stratified randomization", randomization),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social skill training",
"Group psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation",
"Group Psychoeducation", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social Skill Training",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Education and Illness Management",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Illness management",
"Illness Management", trt_type),
sample_factors = if_else(sample_factors =="Older with depression and anxiety",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="All suffered from severe mental illness",
"Shared Social problem(s)/challenge(s)", sample_factors),
sample_factors = if_else(sample_factors =="Shared origin and psychological distress",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="persons with major psychiatric problems",
"Shared Social problem(s)/challenge(s)", sample_factors),
analysis_plan = if_else(analysis_plan == "Unused", "Unused outcomes", analysis_plan),
analysis_plan = case_match(
analysis_plan,
"Hope, Empowerment & Self-efficacy" ~ "Hope, empowerment & self-efficacy",
"Wellbeing and Quality of Life" ~ "Wellbeing and quality of life",
"All mental health outcomes" ~ "General mental health",
"All mental health outcomes/Anxiety" ~ "Anxiety",
"All mental health outcomes/Depression" ~ "Depression",
"All mental health outcomes/Symptoms of psychosis" ~ "Symptoms of psychosis",
"All mental health outcomes/Negative symptoms" ~ "Symptoms of psychosis",
.default = analysis_plan
),
test_type = if_else(test_type == "Clinical administered", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Clinical interviews", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Self report", "Self-reported", test_type),
test_type = if_else(test_type == "Self report through clinical interview", "Self-reported", test_type),
test_type = if_else(test_type == "Self-reported via diagnostic interview", "Self-reported", test_type),
measure_type = if_else(measure_type == "Pre-post with controls", "Post-intervention", measure_type),
cluster_treatment = if_else(cluster_treatment == "Hierarchical mixed models", "Mixed-model", cluster_treatment),
cluster_treatment = if_else(cluster_treatment == "Multilevel analysis and clustered standard errors",
"Multilevel analysis", cluster_treatment),
rob_tool = if_else(rob_tool == "Rob2", "RoB2", rob_tool),
rob_tool = if_else(rob_tool == "Rob2 CRCT", "RoB2", rob_tool),
analysis_strategy = if_else(str_detect(study, "Michalak"), "ITT", analysis_strategy),
conventional = if_else(protocol != "Yes", 1, 0),
prereg_chr = if_else(conventional == 0, "Preregistered", "Not preregistered"),
# For publication/selection/small study bias testing
Wse = sqrt(Wgt),
t_i = gt/sqrt(Wgt),
outcome_construct = case_match(
analysis_plan,
# Mental health outcomes
c("General mental health", "Anxiety",
"Depression", "Symptoms of psychosis") ~ "Mental health outcome",
.default = "Reintegational outcome"
),
# Changing to numeric vectors
across(c(age_mean_sample:male_pct_t, sessions_per_week), ~as.numeric(.x)),
# Make weighted mean weighted by the group sample size
age_mean = if_else(
is.na(age_mean_sample),
(age_mean_t*N_t + age_mean_c*N_c)/(N_t + N_c),
age_mean_sample
),
male_pct = if_else(
is.na(male_pct_sample),
(male_pct_t*N_t + male_pct_c*N_c)/(N_t + N_c),
male_pct_sample
),
# duration_weeks has extract errors
duration_in_weeks = time_from_baseline_weeks - time_after_end_intervention_weeks,
total_number_of_sessions = round(sessions_per_week * duration_in_weeks),
CBT_int = if_else(trt_group == "group-based CBT", "CBT", "Other"),
QES_design = if_else(design == "QES", "QES", "RCT"),
overall_rob = case_match(
Overall,
c("Serious", "High") ~ "Serious/High",
c("Some concerns", "Moderate") ~ "Some concerns/Moderate",
.default = "Low"
),
overall_rob = factor(overall_rob, levels = c("Low", "Some concerns/Moderate", "Serious/High")),
across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder, ~ replace_na(.x, 0))
) |>
rowwise() |>
mutate(
diagnosis = {
col_ones <- names(
across(.cols = schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
)[unlist(
c_across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
) == 1]
n_ones <- length(col_ones)
if (n_ones == 1) col_ones
else if (n_ones > 1) "mixed"
}
) |>
ungroup() |>
mutate(
schizophrenia = if_else(str_detect(diagnosis, "schizophrenia"), "Schizophrenia", "Other")
) |>
mutate(
# Used to remove ITT outcomes from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
n_analysis_strategies = n_distinct(analysis_strategy),
.by = study
) |>
# Removing ITT analyses from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
filter(!c(str_detect(study, "Cano|Craigie|Woj") & analysis_strategy == "ITT"))
```Below, we separate the data by reintegrational (primary analysis) and mental health outcomes (secondary analyses)
A general overview of the main data, we use for analyses of reintegrational outcomes can be found below.
Show the code
```{r reint-data}
#| tbl-cap: "Data with reintegration outcomes."
#| tbl-cap-location: top
#| label: tbl-reint-dat
reintergation_dat <-
gb_dat |>
filter(outcome_construct == "Reintegational outcome")
saveRDS(reintergation_dat, file = "reintergation_dat.rds")
reint_overview <-
reintergation_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
reint_overview |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt) / sqrt(Wgt) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt, vgt, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "300px", fixed_thead = TRUE)
```| Authors (year) | N_t | N_c | Outcome construct | gt | vgt | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | 0.314 | 0.196 | 0.195 | 0.442 | 0.477 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | -0.103 | 0.091 | 0.091 | 0.301 | 0.733 | 0 | High |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.443 | 0.162 | 0.159 | 0.399 | 0.267 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Wellbeing and quality of life | -0.069 | 0.159 | 0.159 | 0.399 | 0.863 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.548 | 0.164 | 0.159 | 0.399 | 0.170 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 42 | Hope, empowerment & self-efficacy | 0.000 | 0.094 | 0.094 | 0.306 | 1.000 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 41 | Psychiatric hospitalization | 0.309 | 0.095 | 0.094 | 0.307 | 0.314 | 1 | Some concerns |
| Bækkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | -0.138 | 0.082 | 0.082 | 0.286 | 0.631 | 0 | Low |
| Bækkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | 0.340 | 0.089 | 0.088 | 0.297 | 0.253 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.259 | 0.006 | 0.006 | 0.080 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.428 | 0.005 | 0.005 | 0.072 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.439 | 0.007 | 0.007 | 0.082 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.565 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.593 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.305 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.389 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.066 | 0.008 | 0.008 | 0.088 | 0.450 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.128 | 0.006 | 0.006 | 0.079 | 0.104 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.224 | 0.008 | 0.008 | 0.090 | 0.013 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.301 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.308 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.211 | 0.006 | 0.006 | 0.076 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.194 | 0.008 | 0.008 | 0.091 | 0.033 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.342 | 0.009 | 0.009 | 0.095 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.357 | 0.008 | 0.007 | 0.086 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.403 | 0.010 | 0.010 | 0.098 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.381 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.232 | 0.007 | 0.007 | 0.082 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.083 | 0.007 | 0.007 | 0.082 | 0.313 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.179 | 0.010 | 0.010 | 0.099 | 0.072 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.455 | 0.010 | 0.010 | 0.101 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.457 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.512 | 0.011 | 0.011 | 0.103 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.598 | 0.010 | 0.009 | 0.096 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.410 | 0.008 | 0.008 | 0.087 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.281 | 0.008 | 0.008 | 0.087 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.245 | 0.011 | 0.011 | 0.105 | 0.019 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Wellbeing and quality of life | -0.247 | 0.026 | 0.026 | 0.162 | 0.128 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.020 | 0.025 | 0.025 | 0.159 | 0.900 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.046 | 0.026 | 0.026 | 0.160 | 0.774 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.037 | 0.020 | 0.020 | 0.141 | 0.792 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.083 | 0.020 | 0.020 | 0.142 | 0.558 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.265 | 0.022 | 0.021 | 0.147 | 0.070 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.137 | 0.022 | 0.022 | 0.147 | 0.352 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.209 | 0.022 | 0.022 | 0.147 | 0.157 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.081 | 0.022 | 0.022 | 0.149 | 0.588 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Wellbeing and quality of life | 0.203 | 0.022 | 0.021 | 0.147 | 0.167 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Wellbeing and quality of life | 0.074 | 0.022 | 0.022 | 0.147 | 0.616 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Wellbeing and quality of life | 0.177 | 0.022 | 0.022 | 0.147 | 0.229 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Wellbeing and quality of life | 0.166 | 0.022 | 0.022 | 0.149 | 0.266 | 0 | Low |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.207 | 0.065 | 0.065 | 0.254 | 0.416 | 0 | High |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.035 | 0.065 | 0.065 | 0.254 | 0.890 | 0 | High |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.204 | 0.013 | 0.013 | 0.114 | 0.074 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.055 | 0.013 | 0.013 | 0.114 | 0.630 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.019 | 0.013 | 0.013 | 0.114 | 0.866 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.113 | 0.013 | 0.013 | 0.114 | 0.321 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.102 | 0.013 | 0.013 | 0.114 | 0.373 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.169 | 0.013 | 0.013 | 0.114 | 0.140 | 0 | Some concerns |
| Gestel-Timmermans et al. 2012 | 136 | 117 | Hope, empowerment & self-efficacy | 0.193 | 0.014 | 0.014 | 0.118 | 0.102 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 99 | Hope, empowerment & self-efficacy | 0.156 | 0.014 | 0.014 | 0.120 | 0.191 | 0 | High |
| Gestel-Timmermans et al. 2012 | 132 | 118 | Hope, empowerment & self-efficacy | 0.122 | 0.014 | 0.014 | 0.117 | 0.298 | 0 | High |
| Gestel-Timmermans et al. 2012 | 120 | 97 | Hope, empowerment & self-efficacy | 0.348 | 0.017 | 0.017 | 0.129 | 0.007 | 0 | High |
| Gestel-Timmermans et al. 2012 | 138 | 122 | Loneliness | -0.196 | 0.014 | 0.014 | 0.116 | 0.092 | 0 | High |
| Gestel-Timmermans et al. 2012 | 125 | 102 | Loneliness | -0.039 | 0.014 | 0.014 | 0.117 | 0.740 | 0 | High |
| Gestel-Timmermans et al. 2012 | 124 | 114 | Wellbeing and quality of life | -0.045 | 0.011 | 0.011 | 0.106 | 0.675 | 0 | High |
| Gestel-Timmermans et al. 2012 | 111 | 97 | Wellbeing and quality of life | -0.039 | 0.012 | 0.012 | 0.111 | 0.727 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | Alcohol and drug abuse/misuse | 0.094 | 0.023 | 0.022 | 0.150 | 0.531 | 1 | Serious |
| Gatz et al. 2007 | 135 | 176 | Alcohol and drug abuse/misuse | 0.204 | 0.046 | 0.046 | 0.214 | 0.340 | 1 | Serious |
| Gatz et al. 2007 | 134 | 173 | Hope, empowerment & self-efficacy | 0.241 | 0.019 | 0.019 | 0.138 | 0.081 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | Social functioning (degree of impairment) | 0.181 | 0.190 | 0.189 | 0.434 | 0.677 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | Wellbeing and quality of life | 0.258 | 0.142 | 0.141 | 0.375 | 0.492 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | -0.388 | 0.143 | 0.141 | 0.375 | 0.301 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | 0.183 | 0.141 | 0.141 | 0.375 | 0.627 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | Wellbeing and quality of life | 0.501 | 0.033 | 0.026 | 0.162 | 0.002 | 1 | Serious |
| Hagen et al. 2005 | 14 | 17 | Social functioning (degree of impairment) | -0.039 | 0.174 | 0.174 | 0.418 | 0.925 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Loneliness | -0.246 | 0.006 | 0.005 | 0.073 | 0.001 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Physical health | 0.175 | 0.141 | 0.140 | 0.375 | 0.640 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Alcohol and drug abuse/misuse | 0.070 | 0.140 | 0.140 | 0.375 | 0.852 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | -0.283 | 0.142 | 0.140 | 0.375 | 0.450 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.434 | 0.143 | 0.140 | 0.375 | 0.247 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.036 | 0.140 | 0.140 | 0.375 | 0.924 | 0 | High |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.492 | 0.085 | 0.083 | 0.288 | 0.087 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.464 | 0.085 | 0.083 | 0.288 | 0.107 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.508 | 0.085 | 0.083 | 0.288 | 0.077 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.819 | 0.089 | 0.083 | 0.288 | 0.004 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.495 | 0.120 | 0.116 | 0.341 | 0.147 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.442 | 0.119 | 0.116 | 0.341 | 0.195 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.133 | 0.117 | 0.116 | 0.341 | 0.696 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.053 | 0.116 | 0.116 | 0.341 | 0.876 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.392 | 0.118 | 0.116 | 0.341 | 0.251 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.433 | 0.119 | 0.116 | 0.341 | 0.205 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.222 | 0.117 | 0.116 | 0.341 | 0.515 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | -0.121 | 0.117 | 0.116 | 0.341 | 0.723 | 1 | Serious |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 1.120 | 0.094 | 0.083 | 0.288 | 0.000 | 1 | Some concerns |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 0.281 | 0.083 | 0.083 | 0.288 | 0.329 | 1 | Some concerns |
| James et al. 2004 | 28 | 29 | Alcohol and drug abuse/misuse | 0.538 | 0.087 | 0.085 | 0.291 | 0.064 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | -0.151 | 0.078 | 0.078 | 0.279 | 0.589 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | 0.037 | 0.078 | 0.078 | 0.279 | 0.896 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Wellbeing and quality of life | 0.862 | 0.148 | 0.137 | 0.371 | 0.020 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Loneliness | 0.103 | 0.158 | 0.158 | 0.398 | 0.796 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Wellbeing and quality of life | 0.214 | 0.159 | 0.158 | 0.398 | 0.590 | 0 | Low |
| Madigan et al. 2013 | 36 | 18 | Alcohol and drug abuse/misuse | 0.024 | 0.097 | 0.097 | 0.312 | 0.940 | 1 | Some concerns |
| Madigan et al. 2013 | 39 | 19 | Social functioning (degree of impairment) | 0.056 | 0.091 | 0.091 | 0.302 | 0.852 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 15 | Wellbeing and quality of life | 0.490 | 0.113 | 0.110 | 0.332 | 0.139 | 1 | Some concerns |
| Madigan et al. 2013 | 28 | 14 | Alcohol and drug abuse/misuse | 0.049 | 0.125 | 0.125 | 0.354 | 0.891 | 1 | Some concerns |
| Madigan et al. 2013 | 31 | 16 | Social functioning (degree of impairment) | 0.010 | 0.111 | 0.111 | 0.333 | 0.976 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 14 | Wellbeing and quality of life | 0.677 | 0.119 | 0.114 | 0.338 | 0.045 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Self-esteem | 0.521 | 0.052 | 0.048 | 0.219 | 0.017 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Wellbeing and quality of life | 0.129 | 0.109 | 0.108 | 0.329 | 0.694 | 1 | Serious |
| McCay et al. 2007 | 29 | 18 | Self-esteem | 0.386 | 0.018 | 0.016 | 0.128 | 0.003 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Wellbeing and quality of life | 0.509 | 0.019 | 0.016 | 0.126 | 0.000 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Hope, empowerment & self-efficacy | 0.400 | 0.021 | 0.019 | 0.137 | 0.004 | 1 | High |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.299 | 0.055 | 0.054 | 0.233 | 0.200 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.349 | 0.033 | 0.032 | 0.180 | 0.052 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.115 | 0.032 | 0.031 | 0.177 | 0.518 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.329 | 0.037 | 0.036 | 0.190 | 0.083 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.472 | 0.054 | 0.052 | 0.229 | 0.039 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.410 | 0.044 | 0.043 | 0.207 | 0.048 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.134 | 0.039 | 0.038 | 0.196 | 0.495 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.270 | 0.035 | 0.035 | 0.186 | 0.148 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Social functioning (degree of impairment) | 0.567 | 0.055 | 0.052 | 0.229 | 0.013 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Social functioning (degree of impairment) | 0.389 | 0.045 | 0.044 | 0.209 | 0.063 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Hope, empowerment & self-efficacy | 0.296 | 0.028 | 0.027 | 0.166 | 0.074 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | Hope, empowerment & self-efficacy | 0.985 | 0.091 | 0.078 | 0.279 | 0.000 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | 0.109 | 0.163 | 0.162 | 0.403 | 0.787 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | -0.268 | 0.164 | 0.162 | 0.403 | 0.506 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | Wellbeing and quality of life | 0.415 | 0.018 | 0.018 | 0.133 | 0.002 | 1 | Moderate |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.129 | 0.032 | 0.032 | 0.178 | 0.468 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.325 | 0.032 | 0.032 | 0.178 | 0.067 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.168 | 0.032 | 0.032 | 0.178 | 0.344 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.178 | 0.032 | 0.032 | 0.178 | 0.317 | 0 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.131 | 0.112 | 0.112 | 0.334 | 0.696 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Self-esteem | 0.716 | 0.118 | 0.112 | 0.334 | 0.032 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.101 | 0.112 | 0.112 | 0.334 | 0.762 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Employment | 0.296 | 0.113 | 0.112 | 0.334 | 0.376 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | -0.117 | 0.119 | 0.118 | 0.344 | 0.733 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | 0.181 | 0.114 | 0.113 | 0.337 | 0.591 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Self-esteem | 0.225 | 0.114 | 0.113 | 0.337 | 0.504 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | -0.113 | 0.113 | 0.113 | 0.337 | 0.737 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Employment | 0.030 | 0.113 | 0.113 | 0.337 | 0.930 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | 0.000 | 0.118 | 0.118 | 0.344 | 1.000 | 1 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.333 | 0.104 | 0.102 | 0.319 | 0.297 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | -0.094 | 0.057 | 0.057 | 0.239 | 0.694 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.650 | 0.125 | 0.118 | 0.344 | 0.059 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Self-esteem | 0.511 | 0.035 | 0.031 | 0.177 | 0.004 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.522 | 0.107 | 0.103 | 0.321 | 0.104 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.196 | 0.155 | 0.154 | 0.393 | 0.617 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | -0.258 | 0.155 | 0.154 | 0.393 | 0.510 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.772 | 0.391 | 0.381 | 0.617 | 0.211 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Self-esteem | 0.338 | 0.094 | 0.092 | 0.304 | 0.267 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.724 | 0.274 | 0.266 | 0.515 | 0.160 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.074 | 0.068 | 0.068 | 0.262 | 0.779 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | -0.269 | 0.069 | 0.068 | 0.262 | 0.303 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.953 | 0.075 | 0.068 | 0.262 | 0.000 | 1 | Some concerns |
| Sajatovic et al. 2009 | 61 | 61 | Social functioning (degree of impairment) | 0.220 | 0.041 | 0.041 | 0.202 | 0.278 | 1 | Some concerns |
| Sajatovic et al. 2009 | 46 | 53 | Social functioning (degree of impairment) | 0.086 | 0.052 | 0.052 | 0.228 | 0.706 | 1 | Some concerns |
| Sajatovic et al. 2009 | 40 | 39 | Social functioning (degree of impairment) | 0.059 | 0.063 | 0.063 | 0.251 | 0.814 | 1 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | -0.104 | 0.062 | 0.061 | 0.248 | 0.675 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | 0.445 | 0.063 | 0.061 | 0.248 | 0.073 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | -0.341 | 0.062 | 0.061 | 0.248 | 0.169 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.021 | 0.061 | 0.061 | 0.248 | 0.932 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.148 | 0.062 | 0.061 | 0.248 | 0.550 | 0 | Low |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.144 | 0.023 | 0.022 | 0.150 | 0.338 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.151 | 0.023 | 0.023 | 0.152 | 0.320 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.346 | 0.023 | 0.022 | 0.150 | 0.021 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.036 | 0.023 | 0.023 | 0.152 | 0.813 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.223 | 0.023 | 0.022 | 0.150 | 0.137 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.148 | 0.023 | 0.023 | 0.152 | 0.328 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.088 | 0.022 | 0.022 | 0.150 | 0.558 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.000 | 0.023 | 0.023 | 0.152 | 1.000 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.369 | 0.023 | 0.022 | 0.150 | 0.014 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.184 | 0.023 | 0.023 | 0.152 | 0.225 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.264 | 0.023 | 0.022 | 0.150 | 0.078 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.084 | 0.023 | 0.023 | 0.152 | 0.579 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.306 | 0.023 | 0.022 | 0.150 | 0.041 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.074 | 0.023 | 0.023 | 0.152 | 0.625 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.495 | 0.023 | 0.022 | 0.150 | 0.001 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.023 | 0.152 | 0.100 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.022 | 0.150 | 0.096 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.080 | 0.023 | 0.023 | 0.152 | 0.600 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.252 | 0.034 | 0.034 | 0.184 | 0.171 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.661 | 0.044 | 0.043 | 0.208 | 0.001 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Alcohol and drug abuse/misuse | -0.143 | 0.041 | 0.041 | 0.203 | 0.480 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Wellbeing and quality of life | 0.250 | 0.034 | 0.033 | 0.183 | 0.171 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Hope, empowerment & self-efficacy | 0.353 | 0.038 | 0.038 | 0.194 | 0.069 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Wellbeing and quality of life | 0.082 | 0.038 | 0.038 | 0.194 | 0.671 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Social functioning (degree of impairment) | -0.254 | 0.038 | 0.038 | 0.194 | 0.191 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Hope, empowerment & self-efficacy | 0.532 | 0.044 | 0.042 | 0.206 | 0.010 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Wellbeing and quality of life | -0.032 | 0.042 | 0.042 | 0.206 | 0.875 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Social functioning (degree of impairment) | 0.008 | 0.042 | 0.042 | 0.206 | 0.970 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.150 | 0.048 | 0.047 | 0.218 | 0.492 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.104 | 0.048 | 0.047 | 0.218 | 0.632 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.138 | 0.048 | 0.047 | 0.218 | 0.526 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.325 | 0.048 | 0.047 | 0.218 | 0.135 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.136 | 0.048 | 0.047 | 0.218 | 0.533 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.028 | 0.047 | 0.047 | 0.218 | 0.897 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | -0.172 | 0.048 | 0.047 | 0.218 | 0.429 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 0.092 | 0.126 | 0.126 | 0.355 | 0.795 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 1.355 | 0.150 | 0.126 | 0.355 | 0.000 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | Social functioning (degree of impairment) | 0.105 | 0.089 | 0.089 | 0.299 | 0.725 | 0 | Low |
| Smith et al. 2021 | 27 | 35 | Loneliness | 0.679 | 0.093 | 0.089 | 0.298 | 0.023 | 0 | High |
| Wuthrich & Rapee 2013 | 27 | 35 | Wellbeing and quality of life | 0.511 | 0.091 | 0.089 | 0.298 | 0.086 | 0 | Some concerns |
A general overview of the main data, we use for analyses of mental health outcomes can be found below.
Show the code
```{r mental-data}
#| tbl-cap: "Data with mental health outcomes."
#| tbl-cap-location: top
#| label: tbl-mental-dat
mental_health_dat <-
gb_dat |>
filter(outcome_construct == "Mental health outcome")
#saveRDS(mental_health_dat, file = "mental_health_dat.rds")
mental_overview_dat <-
mental_health_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
mental_overview_dat |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt) / sqrt(Wgt) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt, vgt, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "300px", fixed_thead = TRUE)
```| Authors (year) | N_t | N_c | Outcome construct | gt | vgt | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.534 | 0.087 | 0.084 | 0.289 | 0.065 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.257 | 0.093 | 0.092 | 0.303 | 0.396 | 0 | High |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.559 | 0.135 | 0.131 | 0.362 | 0.123 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.339 | 0.134 | 0.133 | 0.364 | 0.351 | 0 | High |
| Bækkelund et al. 2022 | 29 | 30 | General mental health | 0.112 | 0.163 | 0.163 | 0.403 | 0.782 | 0 | Low |
| Bækkelund et al. 2022 | 29 | 30 | General mental health | 0.100 | 0.140 | 0.140 | 0.375 | 0.789 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Anxiety | 0.906 | 0.004 | 0.003 | 0.054 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Depression | 0.769 | 0.002 | 0.001 | 0.032 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | General mental health | 0.611 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Anxiety | 0.493 | 0.004 | 0.004 | 0.059 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Depression | 0.422 | 0.001 | 0.001 | 0.035 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | General mental health | 0.467 | 0.009 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Anxiety | 0.552 | 0.005 | 0.004 | 0.065 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Depression | 0.445 | 0.002 | 0.001 | 0.038 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | General mental health | 0.459 | 0.010 | 0.010 | 0.099 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Anxiety | 0.580 | 0.005 | 0.005 | 0.068 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Depression | 0.430 | 0.002 | 0.002 | 0.040 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | General mental health | 0.551 | 0.011 | 0.011 | 0.105 | 0.000 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Depression | -0.513 | 0.023 | 0.022 | 0.150 | 0.001 | 1 | Serious |
| Craigie & Nathan 2009 | 157 | 77 | Anxiety | -0.549 | 0.022 | 0.021 | 0.145 | 0.000 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Symptoms of psychosis | 0.155 | 0.040 | 0.040 | 0.200 | 0.438 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Symptoms of psychosis | 0.007 | 0.040 | 0.040 | 0.201 | 0.974 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Symptoms of psychosis | 0.152 | 0.040 | 0.040 | 0.200 | 0.446 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Symptoms of psychosis | 0.024 | 0.041 | 0.041 | 0.203 | 0.905 | 0 | Low |
| Dyck et al. 2000 | 21 | 21 | Symptoms of psychosis | 0.145 | 0.005 | 0.004 | 0.066 | 0.027 | 1 | Some concerns |
| Gestel-Timmermans et al. 2012 | 134 | 116 | General mental health | 0.184 | 0.014 | 0.014 | 0.120 | 0.126 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 100 | General mental health | 0.076 | 0.016 | 0.016 | 0.125 | 0.545 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.052 | 0.011 | 0.011 | 0.103 | 0.616 | 1 | Serious |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.216 | 0.016 | 0.016 | 0.126 | 0.086 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | General mental health | 0.596 | 0.205 | 0.193 | 0.439 | 0.175 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | General mental health | 0.066 | 0.141 | 0.141 | 0.375 | 0.861 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | General mental health | 1.140 | 0.070 | 0.034 | 0.184 | 0.000 | 1 | Serious |
| Hagen et al. 2005 | 15 | 17 | General mental health | 0.407 | 0.169 | 0.166 | 0.408 | 0.319 | 1 | High |
| Hagen et al. 2005 | 15 | 17 | Anxiety | 0.521 | 0.171 | 0.166 | 0.408 | 0.202 | 1 | High |
| Hagen et al. 2005 | 15 | 15 | Depression | 0.490 | 0.178 | 0.173 | 0.416 | 0.239 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Depression | -0.033 | 0.000 | 0.000 | 0.021 | 0.107 | 0 | High |
| Haslam et al. 2019 | 66 | 54 | General mental health | -0.478 | 0.025 | 0.024 | 0.155 | 0.002 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | General mental health | -0.337 | 0.142 | 0.140 | 0.375 | 0.368 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Anxiety | -0.202 | 0.141 | 0.140 | 0.375 | 0.590 | 0 | High |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.597 | 0.086 | 0.083 | 0.288 | 0.038 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.385 | 0.084 | 0.083 | 0.288 | 0.181 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.379 | 0.084 | 0.083 | 0.288 | 0.187 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.564 | 0.086 | 0.083 | 0.288 | 0.050 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.628 | 0.086 | 0.083 | 0.288 | 0.029 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.729 | 0.088 | 0.083 | 0.288 | 0.011 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.827 | 0.089 | 0.083 | 0.288 | 0.004 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.297 | 0.084 | 0.083 | 0.288 | 0.302 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.456 | 0.119 | 0.116 | 0.341 | 0.181 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.328 | 0.118 | 0.116 | 0.341 | 0.336 | 1 | Serious |
| James et al. 2004 | 29 | 29 | General mental health | 0.783 | 0.088 | 0.083 | 0.288 | 0.007 | 1 | Some concerns |
| James et al. 2004 | 31 | 29 | General mental health | 0.465 | 0.081 | 0.079 | 0.282 | 0.099 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | General mental health | 0.037 | 0.078 | 0.078 | 0.279 | 0.893 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Symptoms of psychosis | -0.041 | 0.078 | 0.078 | 0.279 | 0.882 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.667 | 0.143 | 0.137 | 0.371 | 0.072 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.084 | 0.137 | 0.137 | 0.371 | 0.821 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.695 | 0.144 | 0.137 | 0.371 | 0.061 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.644 | 0.143 | 0.137 | 0.371 | 0.082 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.574 | 0.142 | 0.137 | 0.371 | 0.121 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Anxiety | 0.501 | 0.162 | 0.158 | 0.398 | 0.207 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Depression | 0.437 | 0.161 | 0.158 | 0.398 | 0.272 | 0 | Low |
| Madigan et al. 2013 | 42 | 22 | General mental health | 0.000 | 0.081 | 0.081 | 0.285 | 1.000 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Symptoms of psychosis | -0.122 | 0.088 | 0.088 | 0.296 | 0.680 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Depression | 0.065 | 0.088 | 0.088 | 0.296 | 0.827 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 17 | General mental health | -0.024 | 0.106 | 0.106 | 0.326 | 0.942 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 19 | Symptoms of psychosis | 0.156 | 0.101 | 0.100 | 0.317 | 0.623 | 1 | Some concerns |
| Madigan et al. 2013 | 33 | 11 | Depression | 0.022 | 0.133 | 0.133 | 0.365 | 0.952 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.171 | 0.115 | 0.114 | 0.338 | 0.612 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.633 | 0.169 | 0.164 | 0.405 | 0.117 | 1 | Serious |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.253 | 0.068 | 0.067 | 0.260 | 0.330 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.615 | 0.070 | 0.067 | 0.260 | 0.018 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.830 | 0.074 | 0.069 | 0.262 | 0.002 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.549 | 0.071 | 0.069 | 0.262 | 0.036 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | General mental health | -0.475 | 0.028 | 0.027 | 0.166 | 0.004 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Depression | 0.021 | 0.027 | 0.027 | 0.166 | 0.898 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Anxiety | -0.205 | 0.028 | 0.027 | 0.166 | 0.215 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.758 | 0.103 | 0.096 | 0.309 | 0.014 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.554 | 0.052 | 0.048 | 0.219 | 0.011 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.280 | 0.049 | 0.048 | 0.219 | 0.200 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.481 | 0.051 | 0.048 | 0.219 | 0.028 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.451 | 0.166 | 0.162 | 0.403 | 0.263 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.962 | 0.178 | 0.162 | 0.403 | 0.017 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.449 | 0.166 | 0.162 | 0.403 | 0.265 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.625 | 0.169 | 0.162 | 0.403 | 0.121 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.558 | 0.168 | 0.162 | 0.403 | 0.166 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.874 | 0.176 | 0.162 | 0.403 | 0.030 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.563 | 0.168 | 0.162 | 0.403 | 0.163 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.739 | 0.172 | 0.162 | 0.403 | 0.067 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.421 | 0.329 | 0.324 | 0.569 | 0.460 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.876 | 0.269 | 0.245 | 0.495 | 0.077 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | General mental health | -0.367 | 0.018 | 0.018 | 0.135 | 0.007 | 1 | Moderate |
| Rabenstein et al. 2016 | 153 | 148 | Depression | -0.486 | 0.018 | 0.017 | 0.132 | 0.000 | 1 | Moderate |
| Rüsch et al. 2019 | 18 | 17 | Depression | 0.648 | 0.092 | 0.086 | 0.293 | 0.027 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Depression | 0.366 | 0.183 | 0.181 | 0.425 | 0.389 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Depression | -0.060 | 0.068 | 0.068 | 0.262 | 0.820 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | General mental health | -0.064 | 0.068 | 0.068 | 0.262 | 0.806 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | Depression | 0.234 | 0.039 | 0.039 | 0.198 | 0.237 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | General mental health | 0.302 | 0.040 | 0.039 | 0.198 | 0.128 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | Depression | 0.212 | 0.048 | 0.048 | 0.218 | 0.333 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | General mental health | 0.104 | 0.048 | 0.048 | 0.218 | 0.634 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | Depression | 0.108 | 0.062 | 0.062 | 0.249 | 0.665 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | General mental health | 0.189 | 0.062 | 0.062 | 0.249 | 0.447 | 1 | Some concerns |
| Saloheimo et al. 2016 | 27 | 34 | Depression | 0.482 | 0.075 | 0.073 | 0.269 | 0.074 | 0 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | General mental health | 0.151 | 0.062 | 0.061 | 0.248 | 0.541 | 0 | Low |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.072 | 0.022 | 0.022 | 0.150 | 0.632 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.141 | 0.023 | 0.023 | 0.152 | 0.351 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.185 | 0.023 | 0.022 | 0.150 | 0.218 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.168 | 0.023 | 0.023 | 0.152 | 0.269 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.032 | 0.022 | 0.022 | 0.150 | 0.833 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.271 | 0.023 | 0.023 | 0.152 | 0.074 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.137 | 0.023 | 0.022 | 0.150 | 0.360 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.103 | 0.023 | 0.023 | 0.152 | 0.497 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.296 | 0.023 | 0.022 | 0.150 | 0.048 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.182 | 0.023 | 0.023 | 0.152 | 0.229 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.080 | 0.022 | 0.022 | 0.150 | 0.595 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.102 | 0.023 | 0.023 | 0.152 | 0.500 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | -0.050 | 0.022 | 0.022 | 0.150 | 0.739 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.089 | 0.023 | 0.023 | 0.152 | 0.558 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.190 | 0.023 | 0.022 | 0.150 | 0.204 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.110 | 0.023 | 0.023 | 0.152 | 0.468 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.035 | 0.022 | 0.022 | 0.150 | 0.816 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.026 | 0.023 | 0.023 | 0.152 | 0.866 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | General mental health | -0.142 | 0.034 | 0.033 | 0.183 | 0.437 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | General mental health | -0.046 | 0.038 | 0.038 | 0.194 | 0.812 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | General mental health | -0.061 | 0.043 | 0.042 | 0.206 | 0.767 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.046 | 0.047 | 0.047 | 0.218 | 0.832 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.021 | 0.047 | 0.047 | 0.218 | 0.923 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.000 | 0.047 | 0.047 | 0.218 | 1.000 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.153 | 0.048 | 0.047 | 0.218 | 0.481 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.131 | 0.048 | 0.047 | 0.218 | 0.546 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.025 | 0.047 | 0.047 | 0.218 | 0.909 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.043 | 0.047 | 0.047 | 0.218 | 0.844 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.033 | 0.047 | 0.047 | 0.218 | 0.881 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.157 | 0.048 | 0.047 | 0.218 | 0.470 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | General mental health | 0.213 | 0.127 | 0.126 | 0.355 | 0.548 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Depression | 0.289 | 0.127 | 0.126 | 0.355 | 0.416 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | General mental health | 0.084 | 0.022 | 0.021 | 0.147 | 0.565 | 0 | Low |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 1.654 | 0.113 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Anxiety | 1.346 | 0.105 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Depression | 1.801 | 0.119 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Depression | 0.811 | 0.095 | 0.089 | 0.298 | 0.006 | 0 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 0.462 | 0.091 | 0.089 | 0.298 | 0.121 | 0 | Some concerns |
Risk of bias
RoB2
Show the code
```{r rob2-dat}
rho <- 0.8
V_mat <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = reintergation_dat, rho = rho)
rma_res <-
metafor::rma.mv(
gt_pop,
V = V_mat,
random = ~ 1 | study / esid,
data = reintergation_dat
)
tau2 <- rma_res$sigma2[1]
omega2<- rma_res$sigma2[2]
reint_rob2_dat <-
reintergation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum <-
reint_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
V_mat_mental <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = mental_health_dat, rho = rho)
rma_res_mental <-
metafor::rma.mv(
gt_pop,
V = V_mat_mental,
random = ~ 1 | study / esid,
data = mental_health_dat
)
tau2_mental <- rma_res_mental$sigma2[1]
omega2_mental <- rma_res_mental$sigma2[2]
mental_rob2_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2_mental + omega2_mental + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum_mental <-
mental_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Overall
Show the code
```{r rob2-fig-number-reint}
#| label: fig-rob2-reint-raw-number
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (raw numbers)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
) +
facetted_pos_scales(
x = list(
prereg == "Preregistered" ~ scale_x_continuous(breaks = seq(0, 150, 25)
)
)
)
rob_pct_studies / rob_pct_effects
```Show the code
```{r rob2-weighted}
#| label: fig-rob2-reint-weigthed
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (weighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight / rob_pct_effects_weight
```Show the code
```{r rob2-unweighted}
#| label: fig-rob2-reint-unweigthed
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (unweighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweight
```Show the code
```{r rob2-fig-number-mental}
#| label: fig-rob2-mental-raw-number
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (raw numbers)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_mental / rob_pct_effects_mental
```Show the code
```{r rob2-weighted-mental}
#| label: fig-rob2-mental-weigthed
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (weighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight_mental / rob_pct_effects_weight_mental
```Show the code
```{r rob2-unweighted-mental}
#| label: fig-rob2-mental-unweigthed
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (unweighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_unweight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweight
```Subgrouped risk of bias plots
Show the code
```{r rob2-dat-subgroup}
reint_rob2_subgrp_dat <-
reintergation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2" & str_detect(analysis_plan, "Alco|Well|Hope|Social")) |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = case_match(
outcome,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope/empower",
"Social functioning (degree of impairment)" ~ "Social function",
"Wellbeing and quality of life" ~ "Wellbeing/QoL"
)
)
rob_sum_subgrp <-
reint_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_rob2_subgrp_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = factor(
outcome,
levels = c("Anxiety", "Depression", "General mental health", "Symptoms of psychosis")
)
)
rob_sum_subgrp_mental <-
mental_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Show the code
```{r rob2-subgroup-n-studies}
#| label: fig-rob2-reint-n-studies-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (number of studies)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Alcohol/drugs" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 14, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_studies_subgrp
```Show the code
```{r rob2-subgroup-studies-weighted}
#| label: fig-rob2-reint-weigthed-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (weighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrp
```Show the code
```{r rob2-subgroup-studies-unweight}
#| label: fig-rob2-reint-unweigthed-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (unweighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrp
```Show the code
```{r rob2-subgroup-n-effects}
#| label: fig-rob2-reint-n-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (number of effects)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 12, 2)),
prereg == "Preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 20, 5)),
prereg == "Not preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 40, 10)),
prereg == "Not preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrp
```Show the code
```{r rob2-subgroup-effects-weighted}
#| label: fig-rob2-reint-weigthed-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (weighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrp
```Show the code
```{r rob2-subgroup-effects-unweight}
#| label: fig-rob2-reint-unweigthed-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (unweighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrp
```Show the code
```{r rob2-subgroup-n-studies-mental}
#| label: fig-rob2-mental-n-studies-subgroup
#| fig-cap: "RoB2 plot for mental studies and outcomes by type of registration and outcome (number of studies)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "General mental health" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 2, 1))
)
)
rob_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-studies-weighted-mental}
#| label: fig-rob2-mental-weigthed-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (weighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-studies-unweight-mental}
#| label: fig-rob2-mental-unweigthed-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (unweighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-n-effects-mental}
#| label: fig-rob2-mental-n-effects-subgroup
#| fig-cap: "RoB2 plot for mental studies and outcomes by type of registration and outcome (number of effects)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrp_mental
```Show the code
```{r rob2-subgroup-effects-weighted-mental}
#| label: fig-rob2-mental-weigthed-effects-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (weighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrp_mental
```Show the code
```{r rob2-subgroup-effects-unweight-mental}
#| label: fig-rob2-mental-unweigthed-effects-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (unweighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrp_mental
```ROBINS-I
Show the code
```{r ROBINS-I-dat}
reint_robinsi_dat <-
reintergation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum <-
reint_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_robinsi_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum_mental <-
mental_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Show the code
```{r robins-i-raw}
#| label: fig-rob2-robins-i-raw
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (raw number)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_studies <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_effects <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_studies + robin_effects) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-weighted}
#| label: fig-rob2-robins-i-weigthed
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (weighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "% Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight + robin_pct_effects_weight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-unweighted}
#| label: fig-rob2-robins-i-unweigthed
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (unweighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight + robin_pct_effects_unweight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-raw-mental}
#| label: fig-rob2-robins-i-raw-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (raw number)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_studies_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_effects_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_studies_mental + robin_effects_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-weighted-mental}
#| label: fig-rob2-robins-i-weigthed-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (weighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight_mental + robin_pct_effects_weight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-unweighted-mental}
#| label: fig-rob2-robins-i-unweigthed-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (unweighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight_mental + robin_pct_effects_unweight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Descriptives and Dependence Structures
Timeline
Show the code
```{r, time-plot}
#| label: fig-time-plot
#| fig-cap: "Number of studies included in meta-analysis by year."
#| fig-width: 12
#| fig-height: 8
#| message: false
# Figure 1: Number of included studies in the meta-analysis by year
G_timeplot <-
group_based_dat |>
mutate(
prereg = if_else(
str_detect(protocol, regex("yes", ignore_case = TRUE)),
"Preregistered", "Not preregistered"
)
) |>
reframe(year = unique(year), prereg = unique(prereg), .by = study)
# DONE
timeline_plot <- ggplot(G_timeplot, aes(x = year, fill = prereg)) +
geom_bar(col = "black", alpha = 1, width = 1) +
scale_x_continuous(breaks = seq(2000, 2022, 1)) +
scale_y_continuous(breaks = seq(0, 6.5, 1), limits = c(0, 7), expand = c(0,0)) +
theme_bw() +
scale_fill_brewer(palette="Paired")+
theme(
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
#panel.border = element_blank(),
legend.position = "bottom",
legend.title = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
axis.line = element_line(colour = "black")
) +
labs(
x = "Year of publication",
y = "Number of studies",
)
timeline_plot
```Number effects across effect size metrics
Show the code
```{r}
# Number of studies reporting OR
group_based_dat |>
summarise(
n = n(),
.by = c(study, effect_size)
) |>
summarise(
N_studies = length(effect_size),
N_es = sum(n),
.by = effect_size
)
```# A tibble: 2 × 3
effect_size N_studies N_es
<chr> <int> <int>
1 SMD 48 388
2 OR 1 2
Number of effect size estimates per study
Overall per study
Show the code
```{r es-plot}
#| label: fig-es-hist-per-stud
#| fig-cap: "Distribution of number of effect size estimates per study"
#| fig.width: 6.5
#| fig.height: 7
#| message: false
es_plot_per_study <-
gb_dat |>
arrange(desc(study)) |>
mutate(study = factor(study, unique(study))) |>
ggplot(aes(x = study)) +
geom_bar(aes(fill = outcome_construct)) +
scale_y_continuous(breaks = seq(5, 40, by = 5)) +
theme_minimal() +
theme(
legend.position = "bottom"
) +
coord_flip() +
labs(
x = paste0("Study (", n_distinct(gb_dat$study), " studies in total)"),
y = "Number of Effect Size Estimates",
fill = "Outcome construct"
) +
guides(fill = guide_legend(reverse=TRUE))
es_plot_per_study
```Across outcome subgroups per study
Show the code
```{r es-plot-reint}
#| label: fig-es-hist-per-stud-reint
#| fig-cap: "Distribution of number of effects per study, by direction of the effects for reintegrational outcomes."
#| fig-width: 12
#| fig-height: 8
#| message: false
reintergation_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(reintergation_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(reintergation_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-10, 30)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Reintegration") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.05),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)
```Show the code
```{r es-plot-mental}
#| label: fig-es-hist-per-stud-mental
#| fig-cap: "Distribution of number of effects per study, by direction of the effects for mental health outcomes."
#| fig-height: 8.5
#| message: false
mental_health_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(mental_health_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(mental_health_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-5, 15)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Mental Health") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.2),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)
```Overall across all studies and outcomes
Show the code
```{r structure}
# Multi-arms studies
multi_arm_studies <-
gb_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies <-
gb_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies <-
gb_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes <-
gb_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary <-
study_sample_sizes |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies$N_studies[1])
n_studies <- sample_size_summary$studies
```Show the code
```{r structure-table}
#| tbl-cap: "Data structure for the all data."
#| tbl-cap-location: top
#| label: tbl-es-structure
kable(
sample_size_summary,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 48 | 3 | 0 | 343 | 7.1 | 1 | 4.5 | 40 | 5527 | 24 |
Show the code
```{r, sum-es-per-study-plot}
#| label: fig-es-hist
#| fig-cap: "Distribution of number of effect size estimates per study"
#| fig.width: 9
#| fig.height: 7
#| message: false
gb_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = met.brewer("Navajo")[4]) +
scale_x_continuous(breaks = seq(0, 40, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies")
```Across outcome subgroups
Show the code
```{r structure-reint}
# Multi-arms studies
multi_arm_studies_reint <-
reintergation_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_reint <-
reintergation_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_reint <-
reintergation_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_reint <-
reintergation_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_reint <-
study_sample_sizes_reint |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_reint$N_studies[1])
n_studies_reint <- sample_size_summary_reint$studies
```Show the code
```{r structure-table-reint}
#| tbl-cap: "Data structure for the reintegrational data."
#| tbl-cap-location: top
#| label: tbl-es-structure-reint
kable(
sample_size_summary_reint,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 45 | 3 | 0 | 202 | 4.5 | 1 | 3 | 28 | 5390 | 23 |
Show the code
```{r structure-mental}
# Multi-arms studies
multi_arm_studies_mental <-
mental_health_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_mental <-
mental_health_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_mental <-
mental_health_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_mental <-
mental_health_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_mental <-
study_sample_sizes_mental |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_mental$N_studies[1])
n_studies_mental <- sample_size_summary_mental$studies
```Show the code
```{r structure-table-mental}
#| tbl-cap: "Data structure for the mental health data."
#| tbl-cap-location: top
#| label: tbl-es-structure-mental
kable(
sample_size_summary_mental,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 41 | 3 | 0 | 141 | 3.4 | 1 | 2 | 18 | 4663 | 21 |
Show the code
```{r sum-es-plot-reint}
#| label: fig-es-hist-reint
#| fig-cap: "Distribution of number of effects per study for mental for reintegrational outcomes."
#| fig-width: 9
#| fig-height: 6
#| message: false
reintergation_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "cornflowerblue") +
scale_x_continuous(breaks = seq(0, 30, by = 5)) +
scale_y_continuous(breaks = seq(0, 14, 2), limits = c(0, 14)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Reintegration") +
expand_limits(x = 30)
```Show the code
```{r es-plot-mental}
#| label: fig-es-hist-mental
#| fig-cap: "Distribution of number of effects per study for mental health outcomes."
#| fig-height: 8
#| message: false
mental_health_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "gray") +
scale_x_continuous(breaks = seq(0, 20, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2), limits = c(0, 11)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Mental Health") +
expand_limits(x = 20)
```Data structure by outcome constructs
Show the code
```{r labeled-cat-hist-ridge-function}
label_cat_hist_ridge <- function(data, n_es, variable, label_map, level_order) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
require(forcats)
n_es_exp <- enquo(n_es)
var_exp <- enquo(variable)
data <- data |>
mutate(
!!var_exp := fct_recode(!!var_exp, !!!label_map),
!!var_exp := fct_relevel(!!var_exp, !!!level_order),
!!var_exp := fct_rev(!!var_exp)
)
ggplot(data, aes(
x = !!n_es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
alpha = 1,
stat = "binline",
bins = 30,
scale = 0.7,
linewidth = 0.1,
draw_baseline = FALSE
) +
theme_minimal() +
labs(y = "", x = "Effect Size Estimates per Study") +
theme(legend.position = "none")
}
```The following plot shows the effect size estimates distribution within each outcome construct.
Show the code
```{r outcome-construct-ridge-hist}
#| label: fig-outcome-construct-ridge-hist
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcome constructs."
#| fig.width: 9
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
n_es_by_construct <-
gb_dat |>
filter(str_detect(outcome_construct, "Re")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label
#label_dat <-
# n_es_by_construct |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label <- c(
"Wellbeing and quality of life (J = 24, K = 67)" = "Wellbeing and quality of life",
"Social functioning (degree of impairment) (J =16, K = 47)" = "Social functioning (degree of impairment)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)" = "Hope, empowerment & self-efficacy",
"Alcohol and drug abuse/misuse (J = 7, K = 31)" = "Alcohol and drug abuse/misuse",
"Self-esteem (J = 5, K = 14)" = "Self-esteem",
"Loneliness (J = 4, K = 5)" = "Loneliness",
"Physical health (J = 2, K = 3)" = "Physical health",
"Psychiatric hospitalization (J = 1, K = 1)" = "Psychiatric hospitalization",
"Employment (J = 1, K = 2)" = "Employment"
)
out_level <- c(
"Wellbeing and quality of life (J = 24, K = 67)",
"Social functioning (degree of impairment) (J =16, K = 47)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)",
"Alcohol and drug abuse/misuse (J = 7, K = 31)",
"Self-esteem (J = 5, K = 14)",
"Loneliness (J = 4, K = 5)",
"Physical health (J = 2, K = 3)",
"Psychiatric hospitalization (J = 1, K = 1)",
"Employment (J = 1, K = 2)"
)
label_cat_hist_ridge(
data = n_es_by_construct,
n_es = effects,
variable = analysis_plan,
label_map = out_label,
level_order = out_level
) +
expand_limits(x = 20) +
labs(title = "Reintegrational outcomes") +
theme(plot.title = element_text(hjust = 0.5))
```Show the code
```{r outcome-construct-ridge-hist-mental}
#| label: fig-outcome-construct-ridge-hist-mental
#| fig-cap: "Distribution of effect size estimates, by mental health outcome constructs."
#| fig.height: 8.5
#| fig.retina: 2
#| message: false
n_es_by_construct_mental <-
gb_dat |>
filter(str_detect(outcome_construct, "Men")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label_mental
#label_dat_mental <-
# n_es_by_construct_mental |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label_mental <- c(
"General mental health (J = 28, K = 70)" = "General mental health",
"Depression (J = 19, K = 36)" = "Depression",
"Anxiety (J = 9, K = 14)" = "Anxiety",
"Symptoms of psychosis (J = 7, K = 21)" = "Symptoms of psychosis"
)
out_level_mental <- c(
"General mental health (J = 28, K = 70)",
"Depression (J = 19, K = 36)",
"Anxiety (J = 9, K = 14)",
"Symptoms of psychosis (J = 7, K = 21)"
)
label_cat_hist_ridge(
data = n_es_by_construct_mental,
n_es = effects,
variable = analysis_plan,
label_map = out_label_mental,
level_order = out_level_mental
) +
expand_limits(x = 15) +
labs(title = "Mental heath outcomes") +
theme(plot.title = element_text(hjust = 0.5))
```Primary study sample size
Total sample sizes
Show the code
```{r sample-size-overall-reint}
#| tbl-cap: "Distribution of primary study sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size
# Used when describing the treatment group sample sizes
N_t_stud_trtid <-
reintergation_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total <-
N_t_stud_trtid |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total <-
reintergation_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat <-
left_join(N_t_total, N_c_total, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive <-
N_total_dat$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 119.78 | 127.69 | 17 | 41 | 61 | 137 | 631 |
Show the code
```{r sample-size-overall-mental}
#| tbl-cap: "Distribution of primary study sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-mental
# Used when describing the treatment group sample sizes
N_t_stud_trtid_mental <-
mental_health_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total_mental <-
N_t_stud_trtid_mental |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total_mental <-
mental_health_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat_mental <-
left_join(N_t_total_mental, N_c_total_mental, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive_mental <-
N_total_dat_mental$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 113.73 | 125.6 | 17 | 40 | 61 | 128 | 631 |
The following plot displays the distribution of study sample sizes at post-test.
Show the code
```{r sample-size-plot-reint}
#| label: fig-sample-size-reint
#| fig-cap: "Distribution of primary study sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
study_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_reint
```Show the code
```{r sample-size-plot-mental}
#| label: fig-sample-size-mental
#| fig-cap: "Distribution of primary study sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
study_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_mental
```Treatment group
Show the code
```{r sample-size-treatment-reint}
#| tbl-cap: "Distribution of treatment sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-treatment
treatment_sample_size_descriptive <-
N_t_stud_trtid$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 60.88 | 60.32 | 8 | 22.75 | 33.5 | 90.25 | 315 |
Show the code
```{r sample-size-treatment-mental}
#| tbl-cap: "Distribution of treatment sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-treatment-mental
treatment_sample_size_descriptive_mental <-
N_t_stud_trtid_mental$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 57.8 | 59.09 | 8 | 21 | 30 | 75 | 315 |
The following plot displays the distribution of treatment sample sizes at post-test.
Show the code
```{r sample-size-treatment-plot-reint}
#| label: fig-sample-size-treatment-reint
#| fig-cap: "Distribution of treatment sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
treatment_sizes_plot_reint <-
ggplot(N_t_stud_trtid, aes(N_treat)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_reint
```Show the code
```{r sample-size-treatment-plot-mental}
#| label: fig-sample-size-treatment-mental
#| fig-cap: "Distribution of treatment sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
treatment_sizes_plot_mental <-
ggplot(N_t_stud_trtid_mental, aes(N_treat)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_mental
```Control group
Show the code
```{r sample-size-control-reint}
#| tbl-cap: "Distribution of control group sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-control
control_sample_size_descriptive <-
N_total_dat$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 54.84 | 60.5 | 9 | 19 | 30 | 63 | 316 |
Show the code
```{r sample-size-control-mental}
#| tbl-cap: "Distribution of control group sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-control-mental
control_sample_size_descriptive_mental <-
N_total_dat_mental$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 51.71 | 58.61 | 9 | 20 | 29 | 63 | 316 |
The following plot displays the distribution of control sample sizes at post-test.
Show the code
```{r sample-size-control-plot-reint}
#| label: fig-sample-size-control-reint
#| fig-cap: "Distribution of control group sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
control_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_c_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_reint
```Show the code
```{r sample-size-control-plot-mental}
#| label: fig-sample-size-control-mental
#| fig-cap: "Distribution of control group sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
control_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_c_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_mental
```Study sample sizes versus number of effect size estimates per study
Show the code
```{r bivariate-es-plot}
#| label: fig-es-distribution-bivariate
#| fig-cap: "Study sample sizes versus number of effect size estimates for reintegrational outcomes"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
plot <-
reintergation_dat |>
summarise(effects = n(), .by = study) |>
left_join(N_total_dat, by = join_by(study)) |>
relocate(effects, .after = N_total) |>
ggplot(aes(x = N_total, y = effects)) +
geom_point(alpha = 0.5) +
scale_x_continuous(breaks = seq(0, 650, by = 50)) +
guides(size = "none") +
theme_minimal() +
theme(
legend.position = "inside",
legend.position.inside = c(0.9, 0.05),
legend.justification = c(1, 0),
legend.background = element_blank()
) +
labs(x = "Total sample size", y = "Number of effect size estimates per study", color = "") +
expand_limits(y = 30)
ggMarginal(plot, type = "density")
```Moderators
Show the code
```{r cross-tab-function}
cat_dat_cross <- function(variable, study_id, data) {
require(dplyr)
require(rlang)
require(tidyr)
var_exp <- enquo(variable)
study_id_exp <- enquo(study_id)
study_id_name <- as_name(study_id_exp)
res_dat <- data %>%
group_by(!!study_id_exp) %>%
reframe(var_exp_mirror = unique(!!var_exp)) %>%
full_join(data,
by = c(study_id_name),
relationship = "many-to-many") %>%
group_by(!!var_exp, var_exp_mirror) %>%
reframe(
m = n_distinct(!!study_id_exp),
k = n()
) %>%
mutate(size = paste0(m, " (", k, ")")) %>%
select(-m, -k) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size")
names(res_dat)[1] <- "level"
res_dat <-
res_dat |>
mutate(
level = factor(level, levels = unique(names(res_dat[-1])))
) |>
arrange(level)
return(res_dat)
}
```Categorical moderators
Outcome measure
Show the code
```{r outcome-dependency-table-reint}
#| tbl-cap: "Dependency table for preregistration status (reintegration)"
#| tbl-cap-location: top
#| label: tbl-outcome
outcome_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = analysis_plan,
study_id = study
)
outcome_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Physical health | Social functioning (degree of impairment) | Wellbeing and quality of life | Employment | Self-esteem | Loneliness | Psychiatric hospitalization |
|---|---|---|---|---|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 7 (31) | 1 (2) | 1 (1) | 3 (4) | 2 (3) | - | - | - | - |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | - | 1 (2) | 6 (14) | 1 (6) | 3 (15) | 1 (4) | 1 (1) |
| Physical health | 1 (1) | - | 2 (3) | 2 (3) | - | - | - | - | - |
| Social functioning (degree of impairment) | 3 (7) | 1 (2) | 2 (5) | 16 (47) | 7 (30) | - | - | - | - |
| Wellbeing and quality of life | 2 (3) | 6 (12) | - | 7 (34) | 24 (67) | - | 2 (2) | 2 (3) | - |
| Employment | - | 1 (2) | - | - | - | 1 (2) | 1 (2) | - | - |
| Self-esteem | - | 3 (5) | - | - | 2 (2) | 1 (2) | 5 (14) | - | - |
| Loneliness | - | 1 (2) | - | - | 2 (3) | - | - | 4 (5) | - |
| Psychiatric hospitalization | - | 1 (1) | - | - | - | - | - | - | 1 (1) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r outcome-subgroup-dependency-table-reint}
#| tbl-cap: "Dependency table for outcome used for subgroup analysis (reintegration)"
#| tbl-cap-location: top
#| label: tbl-outcome-subgroup
outcome_subgroup_dat_cross <- cat_dat_cross(
data = filter(reintergation_dat, str_detect(analysis_plan, "Alco|Hope|Social|Well")),
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Social functioning (degree of impairment) | Wellbeing and quality of life |
|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 7 (31) | 1 (2) | 3 (4) | 2 (3) |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | 1 (2) | 6 (14) |
| Social functioning (degree of impairment) | 3 (7) | 1 (2) | 16 (47) | 7 (30) |
| Wellbeing and quality of life | 2 (3) | 6 (12) | 7 (34) | 24 (67) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r outcome-subgroup-dependency-table-mental}
#| tbl-cap: "Dependency table for outcome used for subgroup analysis (mental health)"
#| tbl-cap-location: top
#| label: tbl-outcome-subgroup-mental
outcome_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Anxiety | Depression | General mental health | Symptoms of psychosis |
|---|---|---|---|---|
| Anxiety | 9 (14) | 7 (11) | 5 (9) | - |
| Depression | 7 (10) | 19 (36) | 10 (21) | 2 (4) |
| General mental health | 5 (13) | 10 (27) | 28 (70) | 2 (3) |
| Symptoms of psychosis | - | 2 (8) | 2 (3) | 7 (21) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Ridge plot of effect size estimates
Show the code
```{r cat-ridge-function}
cat_ridge <- function(data, es, v, variable) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
es_exp <- enquo(es)
var_exp <- enquo(variable)
v_exp <- enquo(v)
data |>
mutate(!!var_exp := fct_rev(!!var_exp)) |>
ggplot(aes(
x = !!es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
aes(
point_colour = !!var_exp,
point_size = 1 / !!v_exp
),
alpha = .2,
point_alpha = 0.5,
jittered_points = TRUE
) +
theme_minimal() +
labs(y = "", x = "Standardized Mean Difference (Hedges' g)") +
theme(legend.position = "none")
}
```Show the code
```{r type-ridge-reint-analyzed}
#| label: fig-type-ridge-reint-analyzed
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcomes"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
analyzed_outcomes <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Show the code
```{r type-ridge-reint-not-analyzed}
#| label: fig-type-ridge-reint-not-analyzed
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcomes."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
not_analyzed_outcomes <-
reintergation_dat |>
filter(!str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = not_analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Show the code
```{r type-ridge-mental-analyzed}
#| label: fig-type-ridge-mental-analyzed
#| fig-cap: "Distribution of effect size estimates, by mental health outcomes."
#| fig.height: 7
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Network plot for outcome construct
The following plot shows the network structure of outcomes constructs. Each node represent an outcome construct, the edge between a pair of nodes indicates that there is at least one study that examined the contracts between that pair of constructs The width of the edges indicates the number of studies that compare that pair of constructs. The size of the node corresponds to the number of studies measure that construct.
Show the code
```{r network-plot}
#| label: fig-network
#| fig-cap: "Network structure of contrasts between primary and secondary outcome constructs"
#| fig.width: 7
#| fig.height: 6
#| fig.retina: 2
#| message: false
gb_dat_reduced <- gb_dat |> select(study, analysis_plan)
res_dat <- gb_dat_reduced |>
group_by(study) |>
reframe(var_exp_mirror = unique(analysis_plan)) |>
full_join(gb_dat_reduced ,
by = join_by(study),
relationship = "many-to-many") |>
group_by(analysis_plan, var_exp_mirror) |>
reframe(
m = n_distinct(study),
k = n()
) |>
mutate(size = m) |>
select(-m, -k) |>
arrange(var_exp_mirror) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size") |>
arrange(analysis_plan) |>
as.data.frame()
names(res_dat)[1] <- "level"
edges <- res_dat |>
rename(from = "level") |>
pivot_longer(-from, names_to = "to", values_to = "weight") |>
filter(from != to, !is.na(weight)) |>
mutate(
from_chr = as.character(from),
to_chr = as.character(to),
grp_str = paste0(pmin(from_chr, to_chr, na.rm = TRUE), "_", pmax(from_chr, to_chr, na.rm = TRUE))
) |>
distinct(grp_str, .keep_all = TRUE) |>
select(from, to, weight)
g <- graph_from_data_frame(edges, directed = FALSE)
layout <- layout_in_circle(g)
# Adjust label position outward
label_coords <- layout
label_coords[, 1] <- c(
label_coords[1, 1] * 1.35, #1.5,
label_coords[2:6, 1] * 1.5, #1.63,
label_coords[7, 1] * 1.35, #1.68,
label_coords[8:13, 1] * 1.4 #1.63
)
label_coords[, 2] <- c(
label_coords[c(1:3), 2],
label_coords[4, 2] * 1.13,
label_coords[5, 2] * 1.3,
label_coords[6, 2] * 1.13,
label_coords[c(7:9), 2] * 1.13,
label_coords[10, 2] * 1.3,
label_coords[11, 2] * 1.3,
label_coords[12, 2] * 1.3,
label_coords[13, 2] * 1.13
)
node_sizes <- diag(as.matrix(res_dat[, -1]))
plot(
g,
layout = layout,
edge.width = E(g)$weight,
edge.color = met.brewer("Navajo")[5],
vertex.size = node_sizes[c(1:8, 10:13, 9)],
vertex.label = NA,
vertex.color = met.brewer("Navajo")[4],
vertex.frame.width = 0
)
text(
x = label_coords[, 1],
y = label_coords[, 2],
labels = paste0(str_wrap(names(res_dat[c(2:9, 11:14, 10)]), width = 15), "\n(J = ", node_sizes, ")"),
cex = 0.6,
col = "black",
xpd = NA
)
```Diagnosis (schizophrenia vs. rest of the effects)
Show the code
```{r diagnosis-dependency-table-reint}
#| tbl-cap: "Dependency table for diagnosis (reintegration)"
#| tbl-cap-location: top
#| label: tbl-diagnosis-subgroup-reint
diagnosis_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 37 (172) | - |
| Schizophrenia | - | 8 (30) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r diagnosis-dependency-table-mental}
#| tbl-cap: "Dependency table for diagnosis (mental health)"
#| tbl-cap-location: top
#| label: tbl-diagnosis-subgroup-mental
diagnosis_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 35 (130) | - |
| Schizophrenia | - | 6 (11) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r diagnosis-ridge-reint}
#| label: fig-diagnosis-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by diagnosis (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)
```Show the code
```{r type-ridge-mental}
#| label: fig-type-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by diagnosis (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)
```Type of intervention
Show the code
```{r cbt-dependency-table-reint}
#| tbl-cap: "Dependency table for type of intervention (reintegration)"
#| tbl-cap-location: top
#| label: tbl-cbt-subgroup
cbt_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Intervention | CBT | Other |
|---|---|---|
| CBT | 11 (52) | 1 (5) |
| Other | 1 (5) | 35 (150) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r cbt-dependency-table-mental}
#| tbl-cap: "Dependency table for type of intervention (mental health)"
#| tbl-cap-location: top
#| label: tbl-cbt-subgroup-mental
cbt_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Intervention | CBT | Other |
|---|---|---|
| CBT | 11 (46) | 1 (2) |
| Other | 1 (2) | 31 (95) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r cbt-ridge-reint}
#| label: fig-cbt-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of intervention (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)
```Show the code
```{r cbt-ridge-mental}
#| label: fig-cbt-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of intervention (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)
```EGM-like plot
Show the code
```{r egm-reint}
#| label: fig-egm-reint
#| fig-cap: "EGM for reintegrational outcomes"
#| fig.width: 18
#| fig.height: 18
#| fig.retina: 2
#| message: false
egm_dat_reint <-
reintergation_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = case_match(
analysis_plan,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope",
"Psychiatric hospitalization" ~ "Psych hospital",
"Social functioning (degree of impairment)" ~ "Social func",
"Wellbeing and quality of life" ~ "Wellbeing/QoL",
.default = analysis_plan
),
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_reint |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 14)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training, ",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy, IllMan = Ill management,\n",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety, ",
"SCIT = cognitive-behavioral social skills training, ResidentTreat = Residential treatment,\n",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group."
)
)
```Show the code
```{r egm-mental}
#| label: fig-egm-mental
#| fig-cap: "EGM for mental health outcomes"
#| fig.width: 18
#| fig.height: 18
#| fig.retina: 2
#| message: false
egm_dat_mental <-
mental_health_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = analysis_plan,
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp",
"group psychoeducation & social skill training" ~ "GrpPsyEdu&SS"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_mental |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 12)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training,",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy,\nIllMan = Ill management,",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety,",
"SCIT = cognitive-behavioral social skills training,\nResidentTreat = Residential treatment,",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group,\nGrpPsyEdu&SS = Group psychoeducation & social skill training."
)
)
```Type of test
Show the code
```{r test-type-dependency-table-reint}
#| tbl-cap: "Dependency table for type of test (reintegration)"
#| tbl-cap-location: top
#| label: tbl-test-type-subgroup
test_type_dat <-
reintergation_dat |>
filter(test_type != "Raw events")
test_type_dat_cross <- cat_dat_cross(
data = test_type_dat,
variable = test_type,
study_id = study
)
test_type_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 12 (36) | 5 (8) |
| Self-reported | 5 (8) | 38 (165) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r test-type-dependency-table-mental}
#| tbl-cap: "Dependency table for type of test (mental health)"
#| tbl-cap-location: top
#| label: tbl-test-type-subgroup-mental
test_type_dat_mental <-
mental_health_dat |>
filter(test_type != "Raw events")
test_type_dat_cross_mental <- cat_dat_cross(
data = test_type_dat_mental,
variable = test_type,
study_id = study
)
test_type_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 14 (41) | 5 (11) |
| Self-reported | 5 (18) | 32 (100) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r test-type-ridge-reint}
#| label: fig-test-type-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of test (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = test_type_dat, es = gt_pop, variable = test_type, v = vgt_pop)
```Show the code
```{r test-type-ridge-mental}
#| label: fig-test-type-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of test (mental health)."
#| fig.height: 6.2
#| fig.retina: 2
#| message: false
cat_ridge(data = test_type_dat_mental, es = gt_pop, variable = test_type, v = vgt_pop)
```Show the code
```{r es-pval-plot-reint}
#| label: fig-es-pval-reint
#| fig-cap: "Distributions of effect size by p values and outcome measure type."
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
test_type_dat_all <-
gb_dat |>
filter(test_type != "Raw events") |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) ),
)
ggplot(test_type_dat_all, aes(y = gt_pop, x = p_val, color = test_type)) +
geom_point() +
geom_hline(yintercept = 0) +
geom_vline(xintercept = .05, color = "gray") +
facet_grid(outcome_construct~test_type) +
theme_bw() +
theme(legend.position="none") +
labs(x = "p values", y = "Effect sizes (Hedges' g)")
```ITT vs. TOT
Show the code
```{r strategy-dependency-table-reint}
#| tbl-cap: "Dependency table for estimation strategy (reintegration)"
#| tbl-cap-location: top
#| label: tbl-strategy-subgroup
strategy_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Strategy | ITT | TOT |
|---|---|---|
| ITT | 22 (108) | - |
| TOT | - | 23 (94) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
```{r strategy-dependency-table-mental}
#| tbl-cap: "Dependency table for estimation strategy (mental health)"
#| tbl-cap-location: top
#| label: tbl-strategy-subgroup-mental
strategy_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Strategy | ITT | TOT |
|---|---|---|
| ITT | 18 (69) | - |
| TOT | - | 23 (72) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
```{r strategy-ridge-reint}
#| label: fig-strategy-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by estiamtion strategy (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)
```Show the code
```{r strategy-ridge-mental}
#| label: fig-strategy-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by estiamtion strategy (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)
```RCT vs. QES
Show the code
```{r design-dependency-table-reint}
#| tbl-cap: "Dependency table for type of research design (reintegration)"
#| tbl-cap-location: top
#| label: tbl-design-subgroup
design_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Design | QES | RCT |
|---|---|---|
| QES | 8 (18) | - |
| RCT | - | 37 (184) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r design-dependency-table-mental}
#| tbl-cap: "Dependency table for type of research design (mental health)"
#| tbl-cap-location: top
#| label: tbl-design-subgroup-mental
design_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Design | QES | RCT |
|---|---|---|
| QES | 8 (17) | - |
| RCT | - | 33 (124) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r design-ridge-reint}
#| label: fig-design-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by research design (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = QES_design, v = vgt_pop)
```Show the code
```{r design-ridge-mental}
#| label: fig-design-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by research design (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = QES_design, v = vgt_pop)
```Type of control
Show the code
```{r control-dependency-table-reint}
#| tbl-cap: "Dependency table for type of control group (reintegration)"
#| tbl-cap-location: top
#| label: tbl-control-subgroup
control_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
paste0(
"Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 3 (4) | - | - | - |
| TAU | - | 30 (154) | - | - |
| TAU with Waiting-list | - | - | 8 (31) | - |
| Waiting-list only | - | - | - | 4 (13) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r control-dependency-table-mental}
#| tbl-cap: "Dependency table for type of control group (mental health)"
#| tbl-cap-location: top
#| label: tbl-control-subgroup-mental
control_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "See note in the reintegration table to the left.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 2 (3) | - | - | - |
| TAU | - | 28 (108) | - | - |
| TAU with Waiting-list | - | - | 8 (23) | - |
| Waiting-list only | - | - | - | 3 (7) |
| Note: See note in the reintegration table to the left. |
Show the code
```{r control-ridge-reint}
#| label: fig-control-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of control group (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = control, v = vgt_pop)
```Show the code
```{r control-ridge-mental}
#| label: fig-control-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of control group (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = control, v = vgt_pop)
```Risk of bias (RoB)
Show the code
```{r rob-dependency-table-reint}
#| tbl-cap: "Dependency table across overall risk of bias assessments (reintegration)"
#| tbl-cap-location: top
#| label: tbl-rob-subgroup
rob_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (69) | - | - |
| Some concerns/Moderate | - | 21 (94) | 1 (1) |
| Serious/High | - | 1 (1) | 15 (39) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r rob-dependency-table-mental}
#| tbl-cap: "Dependency table across overall risk of bias assessments (mental health)"
#| tbl-cap-location: top
#| label: tbl-rob-subgroup-mental
rob_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (36) | - | - |
| Some concerns/Moderate | - | 20 (79) | 1 (2) |
| Serious/High | - | 1 (2) | 12 (26) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r rob-ridge-reint}
#| label: fig-rob-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by overall risk of bias assessment (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = overall_rob, v = vgt_pop)
```Show the code
```{r rob-ridge-mental}
#| label: fig-rob-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by overall risk of bias assessment (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop)
```Preregistered vs. not preregistered studies
Show the code
```{r prereg-dependency-table-reint}
#| tbl-cap: "Dependency table by type of registration (reintegration)"
#| tbl-cap-location: top
#| label: tbl-prereg-subgroup
prereg_subgroup_dat_cross <- cat_dat_cross(
data = reintergation_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Registration",
colnames(prereg_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Registration | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 22 (61) | - |
| Preregistered | - | 23 (141) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r prereg-dependency-table-mental}
#| tbl-cap: "Dependency table by type of registration (mental health)"
#| tbl-cap-location: top
#| label: tbl-prereg-subgroup-mental
prereg_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(prereg_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 20 (57) | - |
| Preregistered | - | 21 (84) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r prereg-ridge-reint}
#| label: fig-prereg-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of registration (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintergation_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop)
```Show the code
```{r prereg-ridge-mental}
#| label: fig-prereg-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of registration (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop)
```Show the code
```{r prereg-rob-ridge-mental}
#| label: fig-prereg-rob-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by risk of bias assessemnt across outcomes and registration (mental health)."
#| fig.height: 6
#| fig.width: 9
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop) +
facet_grid(outcome_construct~prereg_chr) +
theme(
strip.background = element_rect(color = "black", fill = "gray92")
)
```Continuous moderators
Show the code
```{r, continuous-mod-reint}
#| tbl-cap: "Distribution of continuous moderators (reintegration)"
#| tbl-cap-location: top
#| label: tbl-continuous-characteristics-reint
var_labels <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"Total Number of Sessions" = "sessions",
"Sessions per Week" = "intensity",
"Length of Intervention (in Weeks)" = "duration",
"Weeks After End of Intervention" = "timing",
"Weeks from Baseline" = "weeks_from_baseline"
)
continuous_descriptives <-
reintergation_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab <-
continuous_descriptives |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels, labels = names(var_labels))
)
knitr::kable(
continuous_descriptives_tab,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")
```| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 40.7 | 9.1 | 24.9 | 35.6 | 40.8 | 43.8 | 67.4 |
| Percent Male | 2.2 | 45.8 | 23.0 | 0.0 | 31.5 | 45.7 | 67.4 | 79.5 |
| Total Number of Sessions | 2.2 | 21.2 | 22.0 | 3.0 | 8.0 | 12.0 | 24.0 | 104.0 |
| Sessions per Week | 2.2 | 1.3 | 1.5 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length of Intervention (in Weeks) | 0.0 | 18.6 | 17.0 | 4.0 | 8.0 | 12.0 | 24.0 | 78.0 |
| Weeks After End of Intervention | 0.0 | 6.0 | 10.2 | 0.0 | 0.0 | 1.0 | 6.5 | 52.0 |
| Weeks from Baseline | 0.0 | 24.6 | 22.8 | 6.0 | 12.0 | 18.0 | 26.0 | 130.0 |
Show the code
```{r, continuous-mod-mental}
#| tbl-cap: "Distribution of continuous moderators (mental health)"
#| tbl-cap-location: top
#| label: tbl-continuous-characteristics-mental
var_labels_mental <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"N Sessions" = "sessions",
"Sessions Week" = "intensity",
"Length" = "duration",
"Weeks After Intervention" = "timing",
"Weeks Baseline" = "weeks_from_baseline"
)
continuous_descriptives_mental <-
mental_health_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab_mental <-
continuous_descriptives_mental |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels_mental, labels = names(var_labels_mental))
)
knitr::kable(
continuous_descriptives_tab_mental,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")
```| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 39.6 | 9.4 | 21.6 | 34.8 | 39.8 | 43.1 | 67.4 |
| Percent Male | 2.4 | 44.3 | 23.1 | 0.0 | 28.7 | 45.7 | 64.1 | 77.8 |
| N Sessions | 2.4 | 22.0 | 22.7 | 3.0 | 9.5 | 13.0 | 24.0 | 104.0 |
| Sessions Week | 2.4 | 1.3 | 1.6 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length | 0.0 | 19.6 | 17.6 | 4.0 | 10.0 | 12.0 | 26.0 | 78.0 |
| Weeks After Intervention | 0.0 | 7.0 | 11.1 | 0.0 | 0.0 | 1.0 | 8.0 | 52.0 |
| Weeks Baseline | 0.0 | 26.6 | 24.3 | 6.0 | 12.0 | 18.0 | 29.0 | 130.0 |
Age distribution across studies
Show the code
```{r density-plot-function}
density_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
data |>
ggplot(aes(x = !!var_exp)) +
geom_density(fill = color, alpha = 0.8) +
geom_rug(alpha = 0.7, length = unit(0.04, "npc")) +
scale_y_continuous(labels = scales::label_number(accuracy = 10^(-3))) +
theme_minimal() +
labs(x = x_title, y = "")
}
```Show the code
```{r age-density-reint}
#| label: fig-age-density-reint
#| fig-cap: "Distribution of average age in a study (reintegrational)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
age_density <- density_plot(age, "Mean Age", continuous_descriptives)
age_density + expand_limits(x = 70)
```Show the code
```{r age-density-mental}
#| label: fig-age-density-mental
#| fig-cap: "Distribution of average age in a study (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
age_density_mental <- density_plot(age, "Mean Age", continuous_descriptives_mental, color = "gray")
age_density_mental + expand_limits(x = 70)
```Percent males in sample distribution across studies
Show the code
```{r males-density-reint}
#| label: fig-males-density-reint
#| fig-cap: "Distribution proportion of males in each study (reintegration)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
male_density <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives))
male_density
```Show the code
```{r males-density-mental}
#| label: fig-males-density-mental
#| fig-cap: "Distribution proportion of males in each study (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
male_density_mental <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives_mental, color = "gray"))
male_density_mental
```Total number of sessions
Show the code
```{r hist-plot-function}
hist_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
x_vals <- data[[var_str]]
min_val <- floor(min(x_vals, na.rm = TRUE))
max_val <- ceiling(max(x_vals, na.rm = TRUE))
data |>
ggplot(aes(x = !!var_exp)) +
geom_histogram(binwidth = 1, boundary = 0, fill = color, alpha = 0.8) +
scale_x_continuous(breaks = pretty(seq(min_val, max_val, by = 1), n = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = x_title, y = "")
}
```Show the code
```{r sessions-hist-reint}
#| label: fig-sessions-hist-reint
#| fig-cap: "Distribution of study sessions (reintegration)."
#| fig.width: 7
#| fig.height: 4
#| fig.retina: 2
#| message: false
sessions_hist <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives)
sessions_hist + labs(title = "Reintegration") + theme(plot.title = element_text(hjust = 0.5))
```Show the code
```{r sessions-hist-mental}
#| label: fig-sessions-hist-mental
#| fig-cap: "Distribution of study sessions (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
sessions_hist_mental <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives_mental, color = "gray")
sessions_hist_mental + labs(title = "Mental Health") + theme(plot.title = element_text(hjust = 0.5))
```Duration and intensity (number of sessions per week)
Show the code
```{r duration-plot-reint}
#| label: fig-duration-reint
#| fig-cap: "Length of intervention in weeks (reintegration)"
#| fig.width: 6.8
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintergation_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "1<",
sessions_per_week == 1 ~ "1",
sessions_per_week == 1.5 ~ "1.5",
sessions_per_week == 2 ~ "2",
sessions_per_week == 2.5 ~ "2.5",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption = paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
)
```Show the code
```{r duration-plot-mental}
#| label: fig-duration-mental
#| fig-cap: "Length of intervention in weeks (mental health)"
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "Less than 1",
sessions_per_week == 1 ~ "1 per week",
sessions_per_week == 2 ~ "2 per week",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption =
paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
)
```Weeks after end of intervention
Show the code
```{r follow-up-plot-connected-reint}
#| label: fig-follow-up-connected-reint
#| fig-cap: "Weeks after end of interventions for all studies (reintegration)"
#| fig.width: 6.5
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintergation_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")
```Show the code
```{r follow-up-plot-connected-mental}
#| label: fig-follow-up-connected-mental
#| fig-cap: "Weeks after end of interventions for all studies (mental health)"
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")
```Correlation between effect size estimates and measurement timing
Show the code
```{r es-time-plot-reint}
#| label: fig-es-time-reint
#| fig-cap: "Length of intervention in weeks (reintegration)"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintergation_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")
```Show the code
```{r es-time-plot-mental}
#| label: fig-es-time-mental
#| fig-cap: "Length of intervention in weeks (mental health)"
#| fig.height: 6
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")
```Multivariate structure
Covariance plots
Show the code
```{r, multivaraite-plot-reint}
#| label: fig-multivariate-plot-reint
#| fig-cap: "Multivariate structure between substaintial/theoretical categorical and continuous (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_reint <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint <- ggpairs(multivariate_dat_reint) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_reint
```Show the code
```{r, multivaraite-dat-mental}
#| label: fig-multivariate-plot-mental
#| fig-cap: "Multivariate structure between substaintial/theoretical categorical and continuous covariates (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_mental <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental <- ggpairs(multivariate_dat_mental) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_mental
```Show the code
```{r, multivaraite-dat-reint-method}
#| label: fig-multivariate-plot-reint-method
#| fig-cap: "Multivariate structure between methodological categorical and continuous covariates (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_reint_method <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint_method <- ggpairs(multivariate_dat_reint_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_method
```Show the code
```{r, multivaraite-dat-mental-method}
#| label: fig-multivariate-plot-mental-method
#| fig-cap: "Multivariate structure between methodological categorical and continuous (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_mental_method <-
mental_health_dat |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method <- ggpairs(multivariate_dat_mental_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method
```Show the code
```{r, multivaraite-dat-reint-method-theoretical}
#| label: fig-multivariate-plot-reint-method-theoretical
#| fig-cap: "Multivariate structure between substantial and methodological categorical covariates (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_reint_method_theo <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr
)
multivariate_pairs_reint_method_theo <- ggpairs(multivariate_dat_reint_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_method_theo
```Show the code
```{r, multivaraite-dat-mental-method-theoretical}
#| label: fig-multivariate-plot-mental-method-theoretical
#| fig-cap: "Multivariate structure between substantial and methodological categorical covariates (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: false
multivariate_dat_mental_method_theo <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method_theo <- ggpairs(multivariate_dat_mental_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method_theo
```Covariance matrices
Show the code
```{r correlation-matrix-reint}
#| tbl-cap: "Correlation matrix across all reintegration outcomes."
#| tbl-cap-location: top
#| label: tbl-cor-matix-reint
#| message: false
cor_mat_dat_cat <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat <-
fastDummies::dummy_cols(cor_mat_dat_cat) %>%
select(where(is.numeric))
cor_mat_dat_con <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat <-
bind_cols(cat_dummy_dat, cor_mat_dat_con) |>
select(
alcho = `plan_Alcohol and drug abuse/misuse`,
hope = `plan_Hope, empowerment & self-efficacy`,
sfunc = `plan_Social functioning (degree of impairment)`,
wellb = `plan_Wellbeing and quality of life`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat <-
cor(
model.matrix(
reformulate(names(cor_mat_dat[,1:ncol(cor_mat_dat)])),
data = cor_mat_dat
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted <-
cor_mat |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted,
escape = F,
col.names = c("Category", colnames(cor_mat))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | alcho | hope | sfunc | wellb | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| alcho | 1 | -0.22 | -0.27 | -0.36 | -0.19 | 0.19 | -0.23 | 0.23 | 0.49 | -0.49 | 0.33 | -0.33 | 0.03 | -0.03 | 0.04 | 0.03 | -0.1 | -0.06 | -0.36 | 0.39 | -0.05 | 0.02 | -0.02 | -0.26 | -0.37 | 0.01 | 0.06 | -0.05 | 0.14 |
| hope | -0.22 | 1 | -0.28 | -0.38 | 0.02 | -0.02 | -0.31 | 0.31 | -0.23 | 0.23 | -0.16 | 0.16 | -0.05 | 0.05 | -0.16 | -0.02 | 0.32 | 0.05 | -0.22 | 0.17 | 0.06 | -0.17 | 0.17 | 0.12 | 0.17 | -0.14 | -0.04 | -0.13 | -0.11 |
| sfunc | -0.27 | -0.28 | 1 | -0.46 | 0.19 | -0.19 | 0.23 | -0.23 | -0.04 | 0.04 | -0.01 | 0.01 | -0.08 | 0.08 | 0.06 | 0 | -0.13 | 0.02 | 0.3 | -0.26 | -0.04 | 0.06 | -0.06 | -0.17 | 0.02 | 0.3 | -0.06 | 0.19 | 0.17 |
| wellb | -0.36 | -0.38 | -0.46 | 1 | -0.04 | 0.04 | 0.22 | -0.22 | -0.16 | 0.16 | -0.13 | 0.13 | 0.08 | -0.08 | 0.04 | -0.01 | -0.06 | -0.01 | 0.19 | -0.2 | 0.03 | 0.07 | -0.07 | 0.27 | 0.13 | -0.16 | 0.04 | -0.02 | -0.17 |
| s_schizo | -0.19 | 0.02 | 0.19 | -0.04 | 1 | -1 | -0.26 | 0.26 | -0.07 | 0.07 | 0.2 | -0.2 | -0.02 | 0.02 | 0.12 | -0.16 | -0.09 | 0.2 | 0.38 | -0.36 | -0.02 | 0.08 | -0.08 | -0.21 | 0.5 | 0.49 | -0.01 | 0.06 | 0.38 |
| s_oth | 0.19 | -0.02 | -0.19 | 0.04 | -1 | 1 | 0.26 | -0.26 | 0.07 | -0.07 | -0.2 | 0.2 | 0.02 | -0.02 | -0.12 | 0.16 | 0.09 | -0.2 | -0.38 | 0.36 | 0.02 | -0.08 | 0.08 | 0.21 | -0.5 | -0.49 | 0.01 | -0.06 | -0.38 |
| cbt_trt | -0.23 | -0.31 | 0.23 | 0.22 | -0.26 | 0.26 | 1 | -1 | -0.11 | 0.11 | -0.25 | 0.25 | -0.03 | 0.03 | 0.13 | -0.15 | -0.02 | 0.01 | 0.31 | -0.2 | -0.15 | 0.1 | -0.1 | 0.04 | -0.32 | -0.26 | -0.04 | 0.2 | -0.27 |
| oth_trt | 0.23 | 0.31 | -0.23 | -0.22 | 0.26 | -0.26 | -1 | 1 | 0.11 | -0.11 | 0.25 | -0.25 | 0.03 | -0.03 | -0.13 | 0.15 | 0.02 | -0.01 | -0.31 | 0.2 | 0.15 | -0.1 | 0.1 | -0.04 | 0.32 | 0.26 | 0.04 | -0.2 | 0.27 |
| test_clin | 0.49 | -0.23 | -0.04 | -0.16 | -0.07 | 0.07 | -0.11 | 0.11 | 1 | -1 | 0.23 | -0.23 | 0.09 | -0.09 | 0.17 | -0.11 | -0.11 | -0.06 | -0.28 | 0.26 | 0.02 | -0.03 | 0.03 | -0.19 | -0.37 | -0.03 | 0.06 | -0.02 | 0.03 |
| test_self | -0.49 | 0.23 | 0.04 | 0.16 | 0.07 | -0.07 | 0.11 | -0.11 | -1 | 1 | -0.23 | 0.23 | -0.09 | 0.09 | -0.17 | 0.11 | 0.11 | 0.06 | 0.28 | -0.26 | -0.02 | 0.03 | -0.03 | 0.19 | 0.37 | 0.03 | -0.06 | 0.02 | -0.03 |
| itt | 0.33 | -0.16 | -0.01 | -0.13 | 0.2 | -0.2 | -0.25 | 0.25 | 0.23 | -0.23 | 1 | -1 | -0.1 | 0.1 | 0.26 | -0.1 | -0.24 | -0.15 | -0.19 | 0.25 | -0.1 | 0.17 | -0.17 | -0.15 | -0.02 | 0.27 | -0.02 | -0.07 | 0.21 |
| tot | -0.33 | 0.16 | 0.01 | 0.13 | -0.2 | 0.2 | 0.25 | -0.25 | -0.23 | 0.23 | -1 | 1 | 0.1 | -0.1 | -0.26 | 0.1 | 0.24 | 0.15 | 0.19 | -0.25 | 0.1 | -0.17 | 0.17 | 0.15 | 0.02 | -0.27 | 0.02 | 0.07 | -0.21 |
| qes | 0.03 | -0.05 | -0.08 | 0.08 | -0.02 | 0.02 | -0.03 | 0.03 | 0.09 | -0.09 | -0.1 | 0.1 | 1 | -1 | -0.01 | -0.1 | 0.07 | 0.17 | -0.18 | -0.18 | 0.51 | -0.41 | 0.41 | -0.12 | -0.06 | 0.22 | 0.41 | -0.07 | 0.47 |
| rct | -0.03 | 0.05 | 0.08 | -0.08 | 0.02 | -0.02 | 0.03 | -0.03 | -0.09 | 0.09 | 0.1 | -0.1 | -1 | 1 | 0.01 | 0.1 | -0.07 | -0.17 | 0.18 | 0.18 | -0.51 | 0.41 | -0.41 | 0.12 | 0.06 | -0.22 | -0.41 | 0.07 | -0.47 |
| tau | 0.04 | -0.16 | 0.06 | 0.04 | 0.12 | -0.12 | 0.13 | -0.13 | 0.17 | -0.17 | 0.26 | -0.26 | -0.01 | 0.01 | 1 | -0.8 | -0.44 | -0.26 | 0.1 | 0.11 | -0.29 | 0.04 | -0.04 | 0.02 | -0.07 | 0.06 | -0.3 | 0.28 | -0.11 |
| tau_wait | 0.03 | -0.02 | 0 | -0.01 | -0.16 | 0.16 | -0.15 | 0.15 | -0.11 | 0.11 | -0.1 | 0.1 | -0.1 | 0.1 | -0.8 | 1 | -0.09 | -0.05 | 0 | -0.26 | 0.37 | 0.2 | -0.2 | -0.11 | 0.03 | -0.07 | 0.17 | -0.24 | 0.07 |
| wait | -0.1 | 0.32 | -0.13 | -0.06 | -0.09 | 0.09 | -0.02 | 0.02 | -0.11 | 0.11 | -0.24 | 0.24 | 0.07 | -0.07 | -0.44 | -0.09 | 1 | -0.03 | -0.17 | 0.23 | -0.09 | -0.32 | 0.32 | 0.24 | 0 | -0.08 | 0.3 | -0.09 | 0.02 |
| ind_trt | -0.06 | 0.05 | 0.02 | -0.01 | 0.2 | -0.2 | 0.01 | -0.01 | -0.06 | 0.06 | -0.15 | 0.15 | 0.17 | -0.17 | -0.26 | -0.05 | -0.03 | 1 | -0.01 | -0.04 | 0.07 | -0.13 | 0.13 | -0.14 | 0.14 | 0.14 | 0 | -0.08 | 0.11 |
| rob_low | -0.36 | -0.22 | 0.3 | 0.19 | 0.38 | -0.38 | 0.31 | -0.31 | -0.28 | 0.28 | -0.19 | 0.19 | -0.18 | 0.18 | 0.1 | 0 | -0.17 | -0.01 | 1 | -0.75 | -0.32 | 0.45 | -0.45 | -0.01 | 0.12 | 0.36 | -0.31 | 0.28 | 0.01 |
| rob_mod | 0.39 | 0.17 | -0.26 | -0.2 | -0.36 | 0.36 | -0.2 | 0.2 | 0.26 | -0.26 | 0.25 | -0.25 | -0.18 | 0.18 | 0.11 | -0.26 | 0.23 | -0.04 | -0.75 | 1 | -0.39 | -0.3 | 0.3 | 0.19 | -0.04 | -0.38 | 0.15 | -0.19 | -0.19 |
| rob_high | -0.05 | 0.06 | -0.04 | 0.03 | -0.02 | 0.02 | -0.15 | 0.15 | 0.02 | -0.02 | -0.1 | 0.1 | 0.51 | -0.51 | -0.29 | 0.37 | -0.09 | 0.07 | -0.32 | -0.39 | 1 | -0.19 | 0.19 | -0.25 | -0.11 | 0.05 | 0.21 | -0.13 | 0.26 |
| prereg | 0.02 | -0.17 | 0.06 | 0.07 | 0.08 | -0.08 | 0.1 | -0.1 | -0.03 | 0.03 | 0.17 | -0.17 | -0.41 | 0.41 | 0.04 | 0.2 | -0.32 | -0.13 | 0.45 | -0.3 | -0.19 | 1 | -1 | 0.34 | -0.21 | 0.03 | -0.27 | 0.13 | -0.19 |
| conventional | -0.02 | 0.17 | -0.06 | -0.07 | -0.08 | 0.08 | -0.1 | 0.1 | 0.03 | -0.03 | -0.17 | 0.17 | 0.41 | -0.41 | -0.04 | -0.2 | 0.32 | 0.13 | -0.45 | 0.3 | 0.19 | -1 | 1 | -0.34 | 0.21 | -0.03 | 0.27 | -0.13 | 0.19 |
| age | -0.26 | 0.12 | -0.17 | 0.27 | -0.21 | 0.21 | 0.04 | -0.04 | -0.19 | 0.19 | -0.15 | 0.15 | -0.12 | 0.12 | 0.02 | -0.11 | 0.24 | -0.14 | -0.01 | 0.19 | -0.25 | 0.34 | -0.34 | 1 | -0.01 | -0.29 | 0 | -0.01 | -0.24 |
| male | -0.37 | 0.17 | 0.02 | 0.13 | 0.5 | -0.5 | -0.32 | 0.32 | -0.37 | 0.37 | -0.02 | 0.02 | -0.06 | 0.06 | -0.07 | 0.03 | 0 | 0.14 | 0.12 | -0.04 | -0.11 | -0.21 | 0.21 | -0.01 | 1 | 0.24 | -0.01 | -0.09 | 0.1 |
| dur | 0.01 | -0.14 | 0.3 | -0.16 | 0.49 | -0.49 | -0.26 | 0.26 | -0.03 | 0.03 | 0.27 | -0.27 | 0.22 | -0.22 | 0.06 | -0.07 | -0.08 | 0.14 | 0.36 | -0.38 | 0.05 | 0.03 | -0.03 | -0.29 | 0.24 | 1 | -0.05 | 0.21 | 0.77 |
| int | 0.06 | -0.04 | -0.06 | 0.04 | -0.01 | 0.01 | -0.04 | 0.04 | 0.06 | -0.06 | -0.02 | 0.02 | 0.41 | -0.41 | -0.3 | 0.17 | 0.3 | 0 | -0.31 | 0.15 | 0.21 | -0.27 | 0.27 | 0 | -0.01 | -0.05 | 1 | -0.19 | 0.41 |
| FU | -0.05 | -0.13 | 0.19 | -0.02 | 0.06 | -0.06 | 0.2 | -0.2 | -0.02 | 0.02 | -0.07 | 0.07 | -0.07 | 0.07 | 0.28 | -0.24 | -0.09 | -0.08 | 0.28 | -0.19 | -0.13 | 0.13 | -0.13 | -0.01 | -0.09 | 0.21 | -0.19 | 1 | 0 |
| sess | 0.14 | -0.11 | 0.17 | -0.17 | 0.38 | -0.38 | -0.27 | 0.27 | 0.03 | -0.03 | 0.21 | -0.21 | 0.47 | -0.47 | -0.11 | 0.07 | 0.02 | 0.11 | 0.01 | -0.19 | 0.26 | -0.19 | 0.19 | -0.24 | 0.1 | 0.77 | 0.41 | 0 | 1 |
Excluded factors due to no variation: type of sample (schizophania vs. rest), low risk of bias.
Show the code
```{r correlation-matrix-alcohol}
#| tbl-cap: "Correlation matrix based on alcohol outcome only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-alcohol
#| message: false
cor_mat_dat_cat_alcohol <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_alcohol <-
fastDummies::dummy_cols(cor_mat_dat_cat_alcohol) %>%
select(where(is.numeric))
cor_mat_dat_con_alcohol <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_alcohol <-
bind_cols(cat_dummy_dat_alcohol, cor_mat_dat_con_alcohol) |>
select(
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_alcohol <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_alcohol[,1:ncol(cor_mat_dat_alcohol)])),
data = cor_mat_dat_alcohol
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_alcohol <-
cor_mat_alcohol |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_alcohol,
escape = F,
col.names = c("Category", colnames(cor_mat_alcohol))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbt_trt | 1 | -1 | -0.33 | 0.33 | 0.09 | -0.09 | -0.07 | 0.07 | 0.12 | -0.12 | 0.09 | -0.09 | -0.48 | 0.48 | -0.5 | 0.16 | -0.17 | -0.12 | 0.27 | -0.13 |
| oth_trt | -1 | 1 | 0.33 | -0.33 | -0.09 | 0.09 | 0.07 | -0.07 | -0.12 | 0.12 | -0.09 | 0.09 | 0.48 | -0.48 | 0.5 | -0.16 | 0.17 | 0.12 | -0.27 | 0.13 |
| test_clin | -0.33 | 0.33 | 1 | -1 | 0.41 | -0.41 | -0.33 | 0.33 | 0.55 | -0.55 | 0.41 | -0.41 | 0.68 | -0.68 | 0.63 | -0.79 | -0.28 | -0.57 | 0.32 | -0.4 |
| test_self | 0.33 | -0.33 | -1 | 1 | -0.41 | 0.41 | 0.33 | -0.33 | -0.55 | 0.55 | -0.41 | 0.41 | -0.68 | 0.68 | -0.63 | 0.79 | 0.28 | 0.57 | -0.32 | 0.4 |
| itt | 0.09 | -0.09 | 0.41 | -0.41 | 1 | -1 | 0.09 | -0.09 | -0.15 | 0.15 | -0.11 | 0.11 | 0.6 | -0.6 | 0.64 | -0.59 | 0.41 | 0.15 | 0.1 | 0.25 |
| tot | -0.09 | 0.09 | -0.41 | 0.41 | -1 | 1 | -0.09 | 0.09 | 0.15 | -0.15 | 0.11 | -0.11 | -0.6 | 0.6 | -0.64 | 0.59 | -0.41 | -0.15 | -0.1 | -0.25 |
| qes | -0.07 | 0.07 | -0.33 | 0.33 | 0.09 | -0.09 | 1 | -1 | 0.12 | -0.12 | -0.8 | 0.8 | -0.48 | 0.48 | -0.24 | -0.17 | 0.89 | 0.81 | -0.23 | 0.94 |
| rct | 0.07 | -0.07 | 0.33 | -0.33 | -0.09 | 0.09 | -1 | 1 | -0.12 | 0.12 | 0.8 | -0.8 | 0.48 | -0.48 | 0.24 | 0.17 | -0.89 | -0.81 | 0.23 | -0.94 |
| tau | 0.12 | -0.12 | 0.55 | -0.55 | -0.15 | 0.15 | 0.12 | -0.12 | 1 | -1 | 0.15 | -0.15 | -0.25 | 0.25 | -0.18 | -0.56 | -0.22 | -0.42 | 0.38 | -0.18 |
| tau_wait | -0.12 | 0.12 | -0.55 | 0.55 | 0.15 | -0.15 | -0.12 | 0.12 | -1 | 1 | -0.15 | 0.15 | 0.25 | -0.25 | 0.18 | 0.56 | 0.22 | 0.42 | -0.38 | 0.18 |
| rob_mod | 0.09 | -0.09 | 0.41 | -0.41 | -0.11 | 0.11 | -0.8 | 0.8 | 0.15 | -0.15 | 1 | -1 | 0.34 | -0.34 | 0.37 | 0.19 | -0.76 | -0.62 | 0.28 | -0.76 |
| rob_high | -0.09 | 0.09 | -0.41 | 0.41 | 0.11 | -0.11 | 0.8 | -0.8 | -0.15 | 0.15 | -1 | 1 | -0.34 | 0.34 | -0.37 | -0.19 | 0.76 | 0.62 | -0.28 | 0.76 |
| prereg | -0.48 | 0.48 | 0.68 | -0.68 | 0.6 | -0.6 | -0.48 | 0.48 | -0.25 | 0.25 | 0.34 | -0.34 | 1 | -1 | 0.89 | -0.42 | -0.14 | -0.29 | 0.04 | -0.3 |
| conventional | 0.48 | -0.48 | -0.68 | 0.68 | -0.6 | 0.6 | 0.48 | -0.48 | 0.25 | -0.25 | -0.34 | 0.34 | -1 | 1 | -0.89 | 0.42 | 0.14 | 0.29 | -0.04 | 0.3 |
| age | -0.5 | 0.5 | 0.63 | -0.63 | 0.64 | -0.64 | -0.24 | 0.24 | -0.18 | 0.18 | 0.37 | -0.37 | 0.89 | -0.89 | 1 | -0.35 | 0.1 | 0 | 0 | -0.03 |
| male | 0.16 | -0.16 | -0.79 | 0.79 | -0.59 | 0.59 | -0.17 | 0.17 | -0.56 | 0.56 | 0.19 | -0.19 | -0.42 | 0.42 | -0.35 | 1 | -0.17 | 0.24 | -0.25 | -0.06 |
| dur | -0.17 | 0.17 | -0.28 | 0.28 | 0.41 | -0.41 | 0.89 | -0.89 | -0.22 | 0.22 | -0.76 | 0.76 | -0.14 | 0.14 | 0.1 | -0.17 | 1 | 0.91 | -0.3 | 0.98 |
| int | -0.12 | 0.12 | -0.57 | 0.57 | 0.15 | -0.15 | 0.81 | -0.81 | -0.42 | 0.42 | -0.62 | 0.62 | -0.29 | 0.29 | 0 | 0.24 | 0.91 | 1 | -0.39 | 0.94 |
| FU | 0.27 | -0.27 | 0.32 | -0.32 | 0.1 | -0.1 | -0.23 | 0.23 | 0.38 | -0.38 | 0.28 | -0.28 | 0.04 | -0.04 | 0 | -0.25 | -0.3 | -0.39 | 1 | -0.32 |
| sess | -0.13 | 0.13 | -0.4 | 0.4 | 0.25 | -0.25 | 0.94 | -0.94 | -0.18 | 0.18 | -0.76 | 0.76 | -0.3 | 0.3 | -0.03 | -0.06 | 0.98 | 0.94 | -0.32 | 1 |
Excluded factors due to no variation: type of intervention (CBT vs. rest) and type of test.
Show the code
```{r correlation-matrix-hope}
#| tbl-cap: "Correlation matrix based on hope, empowerment & self-efficacy outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-hope
#| message: false
cor_mat_dat_cat_hope <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_hope <-
fastDummies::dummy_cols(cor_mat_dat_cat_hope) %>%
select(where(is.numeric))
cor_mat_dat_con_hope <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_hope <-
bind_cols(cat_dummy_dat_hope, cor_mat_dat_con_hope) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_hope <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_hope[,1:ncol(cor_mat_dat_hope)])),
data = cor_mat_dat_hope
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_hope <-
cor_mat_hope |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_hope,
escape = F,
col.names = c("Category", colnames(cor_mat_hope))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | s_schizo | s_oth | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | 0.2 | -0.2 | -0.08 | 0.08 | 0.13 | -0.16 | -0.21 | 0.42 | 0.53 | -0.41 | 0.01 | 0.01 | -0.01 | -0.33 | 0.52 | -0.1 | 0.03 | -0.25 | -0.05 |
| s_oth | -1 | 1 | -0.2 | 0.2 | 0.08 | -0.08 | -0.13 | 0.16 | 0.21 | -0.42 | -0.53 | 0.41 | -0.01 | -0.01 | 0.01 | 0.33 | -0.52 | 0.1 | -0.03 | 0.25 | 0.05 |
| itt | 0.2 | -0.2 | 1 | -1 | 0.23 | -0.23 | 0.56 | -0.29 | -0.37 | -0.14 | 0.56 | -0.25 | -0.21 | -0.02 | 0.02 | -0.3 | 0.07 | 0.43 | -0.1 | -0.06 | 0.15 |
| tot | -0.2 | 0.2 | -1 | 1 | -0.23 | 0.23 | -0.56 | 0.29 | 0.37 | 0.14 | -0.56 | 0.25 | 0.21 | 0.02 | -0.02 | 0.3 | -0.07 | -0.43 | 0.1 | 0.06 | -0.15 |
| qes | -0.08 | 0.08 | 0.23 | -0.23 | 1 | -1 | 0.13 | -0.07 | -0.09 | -0.03 | -0.08 | -0.25 | 0.37 | -0.22 | 0.22 | -0.36 | -0.51 | 0.64 | 0.35 | -0.13 | 0.93 |
| rct | 0.08 | -0.08 | -0.23 | 0.23 | -1 | 1 | -0.13 | 0.07 | 0.09 | 0.03 | 0.08 | 0.25 | -0.37 | 0.22 | -0.22 | 0.36 | 0.51 | -0.64 | -0.35 | 0.13 | -0.93 |
| tau | 0.13 | -0.13 | 0.56 | -0.56 | 0.13 | -0.13 | 1 | -0.52 | -0.66 | -0.25 | 0.31 | 0.03 | -0.33 | 0.34 | -0.34 | -0.24 | 0.23 | 0.05 | -0.56 | 0.09 | -0.17 |
| tau_wait | -0.16 | 0.16 | -0.29 | 0.29 | -0.07 | 0.07 | -0.52 | 1 | -0.18 | -0.07 | -0.16 | -0.52 | 0.79 | 0.31 | -0.31 | 0.02 | -0.28 | -0.06 | 0.75 | -0.02 | 0.23 |
| wait | -0.21 | 0.21 | -0.37 | 0.37 | -0.09 | 0.09 | -0.66 | -0.18 | 1 | -0.09 | -0.21 | 0.35 | -0.23 | -0.58 | 0.58 | 0.27 | -0.21 | 0.01 | 0.04 | -0.03 | 0.02 |
| ind_trt | 0.42 | -0.42 | -0.14 | 0.14 | -0.03 | 0.03 | -0.25 | -0.07 | -0.09 | 1 | -0.08 | 0.13 | -0.09 | -0.22 | 0.22 | 0.02 | 0.37 | -0.03 | 0.01 | -0.13 | -0.01 |
| rob_low | 0.53 | -0.53 | 0.56 | -0.56 | -0.08 | 0.08 | 0.31 | -0.16 | -0.21 | -0.08 | 1 | -0.59 | -0.21 | 0.36 | -0.36 | -0.22 | 0.34 | 0.36 | -0.27 | 0.1 | -0.14 |
| rob_mod | -0.41 | 0.41 | -0.25 | 0.25 | -0.25 | 0.25 | 0.03 | -0.52 | 0.35 | 0.13 | -0.59 | 1 | -0.66 | -0.33 | 0.33 | 0.52 | 0.02 | -0.45 | -0.45 | 0.03 | -0.39 |
| rob_high | 0.01 | -0.01 | -0.21 | 0.21 | 0.37 | -0.37 | -0.33 | 0.79 | -0.23 | -0.09 | -0.21 | -0.66 | 1 | 0.07 | -0.07 | -0.43 | -0.34 | 0.22 | 0.8 | -0.13 | 0.6 |
| prereg | 0.01 | -0.01 | -0.02 | 0.02 | -0.22 | 0.22 | 0.34 | 0.31 | -0.58 | -0.22 | 0.36 | -0.33 | 0.07 | 1 | -1 | 0.3 | 0.04 | -0.24 | -0.13 | 0.32 | -0.31 |
| conventional | -0.01 | 0.01 | 0.02 | -0.02 | 0.22 | -0.22 | -0.34 | -0.31 | 0.58 | 0.22 | -0.36 | 0.33 | -0.07 | -1 | 1 | -0.3 | -0.04 | 0.24 | 0.13 | -0.32 | 0.31 |
| age | -0.33 | 0.33 | -0.3 | 0.3 | -0.36 | 0.36 | -0.24 | 0.02 | 0.27 | 0.02 | -0.22 | 0.52 | -0.43 | 0.3 | -0.3 | 1 | -0.04 | -0.57 | -0.08 | 0.19 | -0.38 |
| male | 0.52 | -0.52 | 0.07 | -0.07 | -0.51 | 0.51 | 0.23 | -0.28 | -0.21 | 0.37 | 0.34 | 0.02 | -0.34 | 0.04 | -0.04 | -0.04 | 1 | -0.19 | -0.49 | -0.02 | -0.57 |
| dur | -0.1 | 0.1 | 0.43 | -0.43 | 0.64 | -0.64 | 0.05 | -0.06 | 0.01 | -0.03 | 0.36 | -0.45 | 0.22 | -0.24 | 0.24 | -0.57 | -0.19 | 1 | 0.04 | 0.04 | 0.61 |
| int | 0.03 | -0.03 | -0.1 | 0.1 | 0.35 | -0.35 | -0.56 | 0.75 | 0.04 | 0.01 | -0.27 | -0.45 | 0.8 | -0.13 | 0.13 | -0.08 | -0.49 | 0.04 | 1 | -0.27 | 0.65 |
| FU | -0.25 | 0.25 | -0.06 | 0.06 | -0.13 | 0.13 | 0.09 | -0.02 | -0.03 | -0.13 | 0.1 | 0.03 | -0.13 | 0.32 | -0.32 | 0.19 | -0.02 | 0.04 | -0.27 | 1 | -0.22 |
| sess | -0.05 | 0.05 | 0.15 | -0.15 | 0.93 | -0.93 | -0.17 | 0.23 | 0.02 | -0.01 | -0.14 | -0.39 | 0.6 | -0.31 | 0.31 | -0.38 | -0.57 | 0.61 | 0.65 | -0.22 | 1 |
Excluded factors due to no appearance: waitlist-only
Show the code
```{r correlation-matrix-social}
#| tbl-cap: "Correlation matrix based on social functioning outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-social
#| message: false
cor_mat_dat_cat_social <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_social <-
fastDummies::dummy_cols(cor_mat_dat_cat_social) %>%
select(where(is.numeric))
cor_mat_dat_con_social <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_social <-
bind_cols(cat_dummy_dat_social, cor_mat_dat_con_social) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_social <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_social[,1:ncol(cor_mat_dat_social)])),
data = cor_mat_dat_social
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_social <-
cor_mat_social |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_social,
escape = F,
col.names = c("Category", colnames(cor_mat_social))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```Excluded factors due to no appearance: waitlist-only
Show the code
```{r correlation-matrix-wellbeing}
#| tbl-cap: "Correlation matrix based on wellbeing and quality of life outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-wellbeing
#| message: false
cor_mat_dat_cat_well <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_well <-
fastDummies::dummy_cols(cor_mat_dat_cat_well) %>%
select(where(is.numeric))
cor_mat_dat_con_well <-
reintergation_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_well <-
bind_cols(cat_dummy_dat_well, cor_mat_dat_con_well) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_well <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_well[,1:ncol(cor_mat_dat_well)])),
data = cor_mat_dat_well
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_well <-
cor_mat_well |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_well,
escape = F,
col.names = c("Category", colnames(cor_mat_well))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | -0.32 | 0.32 | 0.17 | -0.17 | 0.22 | -0.22 | 0.07 | -0.07 | 0.18 | -0.15 | -0.07 | -0.05 | 0.19 | -0.28 | 0.1 | -0.03 | 0.03 | -0.36 | 0.52 | 0.54 | -0.02 | 0.07 | 0.51 |
| s_oth | -1 | 1 | 0.32 | -0.32 | -0.17 | 0.17 | -0.22 | 0.22 | -0.07 | 0.07 | -0.18 | 0.15 | 0.07 | 0.05 | -0.19 | 0.28 | -0.1 | 0.03 | -0.03 | 0.36 | -0.52 | -0.54 | 0.02 | -0.07 | -0.51 |
| cbt_trt | -0.32 | 0.32 | 1 | -1 | -0.09 | 0.09 | -0.28 | 0.28 | -0.01 | 0.01 | 0.16 | -0.34 | 0.21 | 0.15 | 0.17 | -0.04 | -0.19 | 0.14 | -0.14 | -0.01 | -0.72 | -0.24 | -0.01 | 0.27 | -0.26 |
| oth_trt | 0.32 | -0.32 | -1 | 1 | 0.09 | -0.09 | 0.28 | -0.28 | 0.01 | -0.01 | -0.16 | 0.34 | -0.21 | -0.15 | -0.17 | 0.04 | 0.19 | -0.14 | 0.14 | 0.01 | 0.72 | 0.24 | 0.01 | -0.27 | 0.26 |
| test_clin | 0.17 | -0.17 | -0.09 | 0.09 | 1 | -1 | -0.12 | 0.12 | 0.27 | -0.27 | 0.17 | -0.14 | -0.06 | -0.04 | -0.34 | 0.05 | 0.4 | -0.42 | 0.42 | -0.25 | 0.24 | -0.15 | 0.1 | -0.15 | 0.04 |
| test_self | -0.17 | 0.17 | 0.09 | -0.09 | -1 | 1 | 0.12 | -0.12 | -0.27 | 0.27 | -0.17 | 0.14 | 0.06 | 0.04 | 0.34 | -0.05 | -0.4 | 0.42 | -0.42 | 0.25 | -0.24 | 0.15 | -0.1 | 0.15 | -0.04 |
| itt | 0.22 | -0.22 | -0.28 | 0.28 | -0.12 | 0.12 | 1 | -1 | -0.27 | 0.27 | 0.44 | -0.37 | -0.16 | -0.12 | -0.42 | 0.54 | -0.14 | 0.03 | -0.03 | 0.03 | 0.26 | 0.22 | -0.09 | -0.05 | 0.11 |
| tot | -0.22 | 0.22 | 0.28 | -0.28 | 0.12 | -0.12 | -1 | 1 | 0.27 | -0.27 | -0.44 | 0.37 | 0.16 | 0.12 | 0.42 | -0.54 | 0.14 | -0.03 | 0.03 | -0.03 | -0.26 | -0.22 | 0.09 | 0.05 | -0.11 |
| qes | 0.07 | -0.07 | -0.01 | 0.01 | 0.27 | -0.27 | -0.27 | 0.27 | 1 | -1 | -0.16 | -0.12 | 0.28 | 0.43 | -0.28 | -0.09 | 0.52 | -0.55 | 0.55 | -0.11 | 0.07 | -0.14 | 0.47 | -0.17 | 0.21 |
| rct | -0.07 | 0.07 | 0.01 | -0.01 | -0.27 | 0.27 | 0.27 | -0.27 | -1 | 1 | 0.16 | 0.12 | -0.28 | -0.43 | 0.28 | 0.09 | -0.52 | 0.55 | -0.55 | 0.11 | -0.07 | 0.14 | -0.47 | 0.17 | -0.21 |
| tau | 0.18 | -0.18 | 0.16 | -0.16 | 0.17 | -0.17 | 0.44 | -0.44 | -0.16 | 0.16 | 1 | -0.84 | -0.37 | -0.26 | -0.09 | 0.19 | -0.13 | -0.06 | 0.06 | -0.05 | -0.17 | 0.18 | -0.34 | 0.26 | -0.13 |
| tau_wait | -0.15 | 0.15 | -0.34 | 0.34 | -0.14 | 0.14 | -0.37 | 0.37 | -0.12 | 0.12 | -0.84 | 1 | -0.07 | -0.05 | 0.23 | -0.3 | 0.08 | 0.21 | -0.21 | -0.05 | 0.26 | -0.13 | 0.05 | -0.22 | 0 |
| wait | -0.07 | 0.07 | 0.21 | -0.21 | -0.06 | 0.06 | -0.16 | 0.16 | 0.28 | -0.28 | -0.37 | -0.07 | 1 | -0.02 | -0.18 | 0.24 | -0.08 | -0.12 | 0.12 | 0.31 | -0.09 | -0.09 | 0.67 | -0.11 | 0.32 |
| ind_trt | -0.05 | 0.05 | 0.15 | -0.15 | -0.04 | 0.04 | -0.12 | 0.12 | 0.43 | -0.43 | -0.26 | -0.05 | -0.02 | 1 | -0.12 | -0.09 | 0.29 | -0.24 | 0.24 | -0.13 | -0.05 | -0.05 | -0.01 | -0.05 | -0.04 |
| rob_low | 0.19 | -0.19 | 0.17 | -0.17 | -0.34 | 0.34 | -0.42 | 0.42 | -0.28 | 0.28 | -0.09 | 0.23 | -0.18 | -0.12 | 1 | -0.73 | -0.42 | 0.52 | -0.52 | -0.18 | -0.13 | 0.41 | -0.31 | 0.33 | -0.01 |
| rob_mod | -0.28 | 0.28 | -0.04 | 0.04 | 0.05 | -0.05 | 0.54 | -0.54 | -0.09 | 0.09 | 0.19 | -0.3 | 0.24 | -0.09 | -0.73 | 1 | -0.32 | -0.32 | 0.32 | 0.33 | 0.09 | -0.27 | 0.26 | -0.27 | 0.03 |
| rob_high | 0.1 | -0.1 | -0.19 | 0.19 | 0.4 | -0.4 | -0.14 | 0.14 | 0.52 | -0.52 | -0.13 | 0.08 | -0.08 | 0.29 | -0.42 | -0.32 | 1 | -0.3 | 0.3 | -0.18 | 0.06 | -0.21 | 0.08 | -0.1 | -0.03 |
| prereg | -0.03 | 0.03 | 0.14 | -0.14 | -0.42 | 0.42 | 0.03 | -0.03 | -0.55 | 0.55 | -0.06 | 0.21 | -0.12 | -0.24 | 0.52 | -0.32 | -0.3 | 1 | -1 | 0.36 | -0.37 | 0.05 | -0.35 | 0.2 | -0.27 |
| conventional | 0.03 | -0.03 | -0.14 | 0.14 | 0.42 | -0.42 | -0.03 | 0.03 | 0.55 | -0.55 | 0.06 | -0.21 | 0.12 | 0.24 | -0.52 | 0.32 | 0.3 | -1 | 1 | -0.36 | 0.37 | -0.05 | 0.35 | -0.2 | 0.27 |
| age | -0.36 | 0.36 | -0.01 | 0.01 | -0.25 | 0.25 | 0.03 | -0.03 | -0.11 | 0.11 | -0.05 | -0.05 | 0.31 | -0.13 | -0.18 | 0.33 | -0.18 | 0.36 | -0.36 | 1 | -0.19 | -0.28 | 0.03 | -0.12 | -0.14 |
| male | 0.52 | -0.52 | -0.72 | 0.72 | 0.24 | -0.24 | 0.26 | -0.26 | 0.07 | -0.07 | -0.17 | 0.26 | -0.09 | -0.05 | -0.13 | 0.09 | 0.06 | -0.37 | 0.37 | -0.19 | 1 | 0.39 | -0.02 | -0.28 | 0.38 |
| dur | 0.54 | -0.54 | -0.24 | 0.24 | -0.15 | 0.15 | 0.22 | -0.22 | -0.14 | 0.14 | 0.18 | -0.13 | -0.09 | -0.05 | 0.41 | -0.27 | -0.21 | 0.05 | -0.05 | -0.28 | 0.39 | 1 | -0.15 | 0.26 | 0.62 |
| int | -0.02 | 0.02 | -0.01 | 0.01 | 0.1 | -0.1 | -0.09 | 0.09 | 0.47 | -0.47 | -0.34 | 0.05 | 0.67 | -0.01 | -0.31 | 0.26 | 0.08 | -0.35 | 0.35 | 0.03 | -0.02 | -0.15 | 1 | -0.18 | 0.56 |
| FU | 0.07 | -0.07 | 0.27 | -0.27 | -0.15 | 0.15 | -0.05 | 0.05 | -0.17 | 0.17 | 0.26 | -0.22 | -0.11 | -0.05 | 0.33 | -0.27 | -0.1 | 0.2 | -0.2 | -0.12 | -0.28 | 0.26 | -0.18 | 1 | 0.03 |
| sess | 0.51 | -0.51 | -0.26 | 0.26 | 0.04 | -0.04 | 0.11 | -0.11 | 0.21 | -0.21 | -0.13 | 0 | 0.32 | -0.04 | -0.01 | 0.03 | -0.03 | -0.27 | 0.27 | -0.14 | 0.38 | 0.62 | 0.56 | 0.03 | 1 |
Show the code
```{r correlation-matrix-mental}
#| tbl-cap: "Correlation matrix across all mental health outcomes."
#| tbl-cap-location: top
#| label: tbl-cor-matix-mental
#| message: false
cor_mat_dat_cat_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_mental <-
fastDummies::dummy_cols(cor_mat_dat_cat_mental) %>%
select(where(is.numeric))
cor_mat_dat_con_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_mental <-
bind_cols(cat_dummy_dat_mental, cor_mat_dat_con_mental) |>
select(
anxiety = plan_Anxiety,
depress = plan_Depression,
g_mental = `plan_General mental health`,
symptoms = `plan_Symptoms of psychosis`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_mental <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_mental[,1:ncol(cor_mat_dat_mental)])),
data = cor_mat_dat_mental
)
) %>%
as.data.frame() %>%
select(-c(`(Intercept)`)) %>%
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_mental <-
cor_mat_mental |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_mental,
escape = F,
col.names = c("Category", colnames(cor_mat_mental))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | anxiety | depress | g_mental | symptoms | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| anxiety | 1 | -0.2 | -0.33 | -0.14 | -0.09 | 0.09 | 0.32 | -0.32 | -0.11 | 0.11 | -0.14 | 0.14 | -0.05 | 0.05 | -0.16 | -0.01 | 0.25 | 0.11 | 0.08 | -0.09 | 0.02 | 0.13 | -0.13 | 0.22 | -0.03 | -0.06 | -0.07 | -0.03 | -0.13 |
| depress | -0.2 | 1 | -0.58 | -0.25 | -0.16 | 0.16 | 0.04 | -0.04 | -0.13 | 0.13 | -0.02 | 0.02 | -0.02 | 0.02 | 0.09 | -0.17 | 0.09 | 0.03 | -0.15 | 0.19 | -0.07 | -0.02 | 0.02 | 0.13 | -0.11 | -0.11 | 0 | 0.01 | -0.1 |
| g_mental | -0.33 | -0.58 | 1 | -0.41 | -0.11 | 0.11 | -0.08 | 0.08 | -0.1 | 0.1 | 0.19 | -0.19 | -0.15 | 0.15 | -0.15 | 0.29 | -0.16 | -0.05 | 0.1 | -0.03 | -0.06 | 0.16 | -0.16 | -0.27 | -0.12 | 0.01 | -0.01 | -0.01 | 0.01 |
| symptoms | -0.14 | -0.25 | -0.41 | 1 | 0.43 | -0.43 | -0.21 | 0.21 | 0.39 | -0.39 | -0.13 | 0.13 | 0.27 | -0.27 | 0.23 | -0.18 | -0.1 | -0.06 | -0.01 | -0.11 | 0.16 | -0.31 | 0.31 | 0.03 | 0.33 | 0.17 | 0.08 | 0.03 | 0.22 |
| s_schizo | -0.09 | -0.16 | -0.11 | 0.43 | 1 | -1 | -0.2 | 0.2 | 0 | 0 | 0.12 | -0.12 | 0.07 | -0.07 | 0.09 | -0.12 | -0.06 | 0.15 | 0.35 | -0.31 | 0.01 | 0.12 | -0.12 | -0.18 | 0.34 | 0.46 | -0.06 | 0.04 | 0.31 |
| s_oth | 0.09 | 0.16 | 0.11 | -0.43 | -1 | 1 | 0.2 | -0.2 | 0 | 0 | -0.12 | 0.12 | -0.07 | 0.07 | -0.09 | 0.12 | 0.06 | -0.15 | -0.35 | 0.31 | -0.01 | -0.12 | 0.12 | 0.18 | -0.34 | -0.46 | 0.06 | -0.04 | -0.31 |
| cbt_trt | 0.32 | 0.04 | -0.08 | -0.21 | -0.2 | 0.2 | 1 | -1 | 0.01 | -0.01 | -0.02 | 0.02 | -0.08 | 0.08 | -0.12 | -0.1 | 0.33 | 0.11 | 0.09 | -0.03 | -0.06 | 0.17 | -0.17 | 0.17 | -0.08 | -0.32 | 0.15 | 0.13 | -0.24 |
| oth_trt | -0.32 | -0.04 | 0.08 | 0.21 | 0.2 | -0.2 | -1 | 1 | -0.01 | 0.01 | 0.02 | -0.02 | 0.08 | -0.08 | 0.12 | 0.1 | -0.33 | -0.11 | -0.09 | 0.03 | 0.06 | -0.17 | 0.17 | -0.17 | 0.08 | 0.32 | -0.15 | -0.13 | 0.24 |
| test_clin | -0.11 | -0.13 | -0.1 | 0.39 | 0 | 0 | 0.01 | -0.01 | 1 | -1 | 0.03 | -0.03 | 0.05 | -0.05 | 0.24 | -0.28 | 0.07 | -0.1 | -0.27 | 0.22 | 0.01 | -0.21 | 0.21 | 0.15 | 0.08 | -0.07 | 0.04 | -0.01 | 0.03 |
| test_self | 0.11 | 0.13 | 0.1 | -0.39 | 0 | 0 | -0.01 | 0.01 | -1 | 1 | -0.03 | 0.03 | -0.05 | 0.05 | -0.24 | 0.28 | -0.07 | 0.1 | 0.27 | -0.22 | -0.01 | 0.21 | -0.21 | -0.15 | -0.08 | 0.07 | -0.04 | 0.01 | -0.03 |
| itt | -0.14 | -0.02 | 0.19 | -0.13 | 0.12 | -0.12 | -0.02 | 0.02 | 0.03 | -0.03 | 1 | -1 | -0.19 | 0.19 | 0.33 | -0.19 | -0.23 | -0.15 | -0.2 | 0.26 | -0.1 | 0.25 | -0.25 | -0.32 | -0.22 | 0.16 | -0.14 | 0.03 | 0.03 |
| tot | 0.14 | 0.02 | -0.19 | 0.13 | -0.12 | 0.12 | 0.02 | -0.02 | -0.03 | 0.03 | -1 | 1 | 0.19 | -0.19 | -0.33 | 0.19 | 0.23 | 0.15 | 0.2 | -0.26 | 0.1 | -0.25 | 0.25 | 0.32 | 0.22 | -0.16 | 0.14 | -0.03 | -0.03 |
| qes | -0.05 | -0.02 | -0.15 | 0.27 | 0.07 | -0.07 | -0.08 | 0.08 | 0.05 | -0.05 | -0.19 | 0.19 | 1 | -1 | 0 | -0.16 | 0.11 | 0.25 | -0.22 | -0.33 | 0.67 | -0.45 | 0.45 | -0.08 | 0.03 | 0.15 | 0.39 | -0.13 | 0.42 |
| rct | 0.05 | 0.02 | 0.15 | -0.27 | -0.07 | 0.07 | 0.08 | -0.08 | -0.05 | 0.05 | 0.19 | -0.19 | -1 | 1 | 0 | 0.16 | -0.11 | -0.25 | 0.22 | 0.33 | -0.67 | 0.45 | -0.45 | 0.08 | -0.03 | -0.15 | -0.39 | 0.13 | -0.42 |
| tau | -0.16 | 0.09 | -0.15 | 0.23 | 0.09 | -0.09 | -0.12 | 0.12 | 0.24 | -0.24 | 0.33 | -0.33 | 0 | 0 | 1 | -0.79 | -0.42 | -0.27 | -0.16 | 0.31 | -0.22 | -0.14 | 0.14 | -0.07 | -0.05 | 0.08 | -0.21 | 0.24 | -0.04 |
| tau_wait | -0.01 | -0.17 | 0.29 | -0.18 | -0.12 | 0.12 | -0.1 | 0.1 | -0.28 | 0.28 | -0.19 | 0.19 | -0.16 | 0.16 | -0.79 | 1 | -0.1 | -0.06 | 0.25 | -0.41 | 0.25 | 0.16 | -0.16 | -0.2 | 0.03 | -0.11 | -0.02 | -0.16 | -0.08 |
| wait | 0.25 | 0.09 | -0.16 | -0.1 | -0.06 | 0.06 | 0.33 | -0.33 | 0.07 | -0.07 | -0.23 | 0.23 | 0.11 | -0.11 | -0.42 | -0.1 | 1 | -0.03 | -0.13 | 0.2 | -0.11 | 0.06 | -0.06 | 0.55 | 0 | -0.1 | 0.46 | -0.14 | 0.12 |
| ind_trt | 0.11 | 0.03 | -0.05 | -0.06 | 0.15 | -0.15 | 0.11 | -0.11 | -0.1 | 0.1 | -0.15 | 0.15 | 0.25 | -0.25 | -0.27 | -0.06 | -0.03 | 1 | 0.03 | -0.17 | 0.18 | -0.08 | 0.08 | -0.14 | 0.06 | 0.2 | -0.03 | -0.06 | 0.13 |
| rob_low | 0.08 | -0.15 | 0.1 | -0.01 | 0.35 | -0.35 | 0.09 | -0.09 | -0.27 | 0.27 | -0.2 | 0.2 | -0.22 | 0.22 | -0.16 | 0.25 | -0.13 | 0.03 | 1 | -0.66 | -0.28 | 0.48 | -0.48 | 0.02 | 0.1 | 0.3 | -0.24 | 0.19 | -0.02 |
| rob_mod | -0.09 | 0.19 | -0.03 | -0.11 | -0.31 | 0.31 | -0.03 | 0.03 | 0.22 | -0.22 | 0.26 | -0.26 | -0.33 | 0.33 | 0.31 | -0.41 | 0.2 | -0.17 | -0.66 | 1 | -0.54 | -0.19 | 0.19 | 0.13 | -0.05 | -0.31 | 0.16 | -0.05 | -0.15 |
| rob_high | 0.02 | -0.07 | -0.06 | 0.16 | 0.01 | -0.01 | -0.06 | 0.06 | 0.01 | -0.01 | -0.1 | 0.1 | 0.67 | -0.67 | -0.22 | 0.25 | -0.11 | 0.18 | -0.28 | -0.54 | 1 | -0.28 | 0.28 | -0.19 | -0.05 | 0.07 | 0.07 | -0.14 | 0.22 |
| prereg | 0.13 | -0.02 | 0.16 | -0.31 | 0.12 | -0.12 | 0.17 | -0.17 | -0.21 | 0.21 | 0.25 | -0.25 | -0.45 | 0.45 | -0.14 | 0.16 | 0.06 | -0.08 | 0.48 | -0.19 | -0.28 | 1 | -1 | 0.29 | -0.21 | 0 | -0.27 | 0.08 | -0.25 |
| conventional | -0.13 | 0.02 | -0.16 | 0.31 | -0.12 | 0.12 | -0.17 | 0.17 | 0.21 | -0.21 | -0.25 | 0.25 | 0.45 | -0.45 | 0.14 | -0.16 | -0.06 | 0.08 | -0.48 | 0.19 | 0.28 | -1 | 1 | -0.29 | 0.21 | 0 | 0.27 | -0.08 | 0.25 |
| age | 0.22 | 0.13 | -0.27 | 0.03 | -0.18 | 0.18 | 0.17 | -0.17 | 0.15 | -0.15 | -0.32 | 0.32 | -0.08 | 0.08 | -0.07 | -0.2 | 0.55 | -0.14 | 0.02 | 0.13 | -0.19 | 0.29 | -0.29 | 1 | 0.05 | -0.21 | 0.1 | -0.09 | -0.1 |
| male | -0.03 | -0.11 | -0.12 | 0.33 | 0.34 | -0.34 | -0.08 | 0.08 | 0.08 | -0.08 | -0.22 | 0.22 | 0.03 | -0.03 | -0.05 | 0.03 | 0 | 0.06 | 0.1 | -0.05 | -0.05 | -0.21 | 0.21 | 0.05 | 1 | 0.1 | 0 | -0.14 | 0 |
| dur | -0.06 | -0.11 | 0.01 | 0.17 | 0.46 | -0.46 | -0.32 | 0.32 | -0.07 | 0.07 | 0.16 | -0.16 | 0.15 | -0.15 | 0.08 | -0.11 | -0.1 | 0.2 | 0.3 | -0.31 | 0.07 | 0 | 0 | -0.21 | 0.1 | 1 | -0.15 | 0.18 | 0.72 |
| int | -0.07 | 0 | -0.01 | 0.08 | -0.06 | 0.06 | 0.15 | -0.15 | 0.04 | -0.04 | -0.14 | 0.14 | 0.39 | -0.39 | -0.21 | -0.02 | 0.46 | -0.03 | -0.24 | 0.16 | 0.07 | -0.27 | 0.27 | 0.1 | 0 | -0.15 | 1 | -0.17 | 0.43 |
| FU | -0.03 | 0.01 | -0.01 | 0.03 | 0.04 | -0.04 | 0.13 | -0.13 | -0.01 | 0.01 | 0.03 | -0.03 | -0.13 | 0.13 | 0.24 | -0.16 | -0.14 | -0.06 | 0.19 | -0.05 | -0.14 | 0.08 | -0.08 | -0.09 | -0.14 | 0.18 | -0.17 | 1 | -0.02 |
| sess | -0.13 | -0.1 | 0.01 | 0.22 | 0.31 | -0.31 | -0.24 | 0.24 | 0.03 | -0.03 | 0.03 | -0.03 | 0.42 | -0.42 | -0.04 | -0.08 | 0.12 | 0.13 | -0.02 | -0.15 | 0.22 | -0.25 | 0.25 | -0.1 | 0 | 0.72 | 0.43 | -0.02 | 1 |